mongodb ค้นหาโดยรายการอาร์เรย์หลายรายการ


99

ถ้าฉันมีบันทึกเช่นนี้

{
  "text": "text goes here",
  "words": ["text", "goes", "here"]
}

ฉันจะจับคู่คำหลาย ๆ คำจากมันใน MongoDB ได้อย่างไร เมื่อจับคู่คำเดียวฉันสามารถทำได้

db.find({ words: "text" })

แต่พอลองหลาย ๆ คำมันก็ไม่ได้ผล

db.find({ words: ["text", "here"] })

ฉันเดาว่าการใช้อาร์เรย์จะพยายามจับคู่อาร์เรย์ทั้งหมดกับอาร์เรย์ในระเบียนแทนที่จะจับคู่เนื้อหาแต่ละรายการ

คำตอบ:


175

ขึ้นอยู่กับว่าคุณกำลังพยายามค้นหาเอกสารที่wordsมีทั้งองค์ประกอบ ( textและhere) โดยใช้$all:

db.things.find({ words: { $all: ["text", "here"] }});

หรืออย่างใดอย่างหนึ่ง ( textหรือhere) โดยใช้$in:

db.things.find({ words: { $in: ["text", "here"] }});

3
สิ่งนี้ช่วยฉันด้วยเช่นกันฉันต้องการมันเพื่อค้นหา ID อ็อบเจ็กต์ในอาร์เรย์และสิ่งที่ต้องการ $ in: [ObjectId ("4f9f2c336b810d0cf0000017")] ล้มเหลว, $ in: ["4f9f2c336b810d0cf0000017"] ทำงาน
jbnunn

คุณยังสามารถค้นหาวิธีอื่นในการดำเนินการนี้ได้ในหน้าสนับสนุนmangodb docs.mongodb.org/manual/core/indexes/#indexes-on-sub-documentsและdocs.mongodb.org/manual/core/indexes/#multikey-indexes
Vivek Bajpai

1
วิธีนี้ดีกว่าการวนซ้ำอาร์เรย์และดำเนินการค้นหาเดี่ยว () หรือไม่
Rohit Nair
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.