mongodb знайти за кількома елементами масиву


96

Якщо у мене є такий запис;

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

Як я можу зіставити кілька слів з нього в MongoDB? При зіставленні одного слова я можу це зробити;

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

Але коли я пробую це для кількох слів, це не працює;

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

Я здогадуюсь, що використовуючи масив, він намагається зіставити весь масив із таким у записі, а не зіставляти окремий вміст.

Відповіді:


168

Залежить від того, чи намагаєтесь ви знайти документи, де wordsмістяться обидва елементи ( textта here), використовуючи $all:

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

або будь-який з них ( textабо here) з використанням $in:

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

3
Це допомогло мені теж, мені він знадобився, щоб знайти ідентифікатор об’єкта в масиві, і де щось на зразок $ 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,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.