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.