mongodb znajdź na podstawie wielu elementów tablicy

98

Jeśli mam taki rekord;

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

Jak mogę dopasować wiele słów z tego w MongoDB? Podczas dopasowywania pojedynczego słowa mogę to zrobić;

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

Ale kiedy próbuję tego dla wielu słów, to nie działa;

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

Zgaduję, że używając tablicy, próbuje dopasować całą tablicę do tej w rekordzie, zamiast dopasowywać poszczególne treści.

Stephen Belanger
źródło

Odpowiedzi:

173

Zależy od tego, czy próbujesz znaleźć dokumenty, które wordszawierają oba elementy ( texti here) przy użyciu $all:

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

lub którykolwiek z nich ( textlub here) używając $in:

db.things.find({ words: { $in: ["text", "here"] }});
AbdelHady
źródło
3
To też mi pomogło, potrzebowałem go do znalezienia identyfikatora obiektu w tablicy i gdzie coś takiego jak $ in: [ObjectId ("4f9f2c336b810d0cf0000017")] nie powiodło się, $ in: ["4f9f2c336b810d0cf0000017"] działało
jbnunn
możesz również znaleźć inny sposób, aby to zrobić na stronie pomocy mangodb docs.mongodb.org/manual/core/indexes/#indexes-on-sub-documents i docs.mongodb.org/manual/core/indexes/#multikey-indexes
Vivek Bajpai
1
Czy to lepsze niż zapętlenie tablicy i wykonanie pojedynczego find ()?
Rohit Nair