mongodb ditemukan dengan beberapa item array

97

Jika saya memiliki rekor seperti ini;

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

Bagaimana saya bisa mencocokkan beberapa kata darinya di MongoDB? Saat mencocokkan satu kata, saya bisa melakukan ini;

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

Tetapi ketika saya mencoba ini untuk beberapa kata, itu tidak berhasil;

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

Saya menduga bahwa dengan menggunakan array, ia mencoba mencocokkan seluruh array dengan yang ada di catatan, daripada mencocokkan konten individual.

Stephen Belanger
sumber

Jawaban:

169

Tergantung pada apakah Anda mencoba menemukan dokumen yang wordsberisi kedua elemen ( textdan here) menggunakan $all:

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

atau salah satu dari mereka ( textatau here) menggunakan $in:

db.things.find({ words: { $in: ["text", "here"] }});
AbdelHady
sumber
3
Ini membantu saya juga, saya membutuhkannya untuk menemukan ID objek dalam array, dan di mana sesuatu seperti $ in: [ObjectId ("4f9f2c336b810d0cf0000017")] gagal, $ in: ["4f9f2c336b810d0cf0000017"] berfungsi
jbnunn
Anda juga dapat menemukan cara lain untuk melakukan ini di halaman dukungan mangodb docs.mongodb.org/manual/core/indexes/#indexes-on-sub-documents dan docs.mongodb.org/manual/core/indexes/#multikey-indexes
Vivek Bajpai
1
Apakah ini lebih baik daripada mengulang array dan melakukan single find ()?
Rohit Nair