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.

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"] }});

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


1
Apakah ini lebih baik daripada mengulang array dan melakukan single find ()?
Rohit Nair
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.