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.

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

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


1
Czy to lepsze niż zapętlenie tablicy i wykonanie pojedynczego find ()?
Rohit Nair
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.