Mongodb finden durch mehrere Array-Elemente

96

Wenn ich eine solche Aufzeichnung habe;

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

Wie kann ich in MongoDB mehrere Wörter daraus abgleichen? Wenn ich ein einzelnes Wort finde, kann ich das tun;

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

Aber wenn ich das für mehrere Wörter versuche, funktioniert es nicht;

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

Ich vermute, dass durch die Verwendung eines Arrays versucht wird, das gesamte Array mit dem im Datensatz abzugleichen, anstatt den einzelnen Inhalten zu entsprechen.

Stephen Belanger
quelle

Antworten:

167

Hängt davon ab, ob Sie versuchen, Dokumente zu finden, in denen wordsbeide Elemente ( textund here) enthalten sind, indem Sie $all:

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

oder einer von ihnen (text oder here) mit $in:

db.things.find({ words: { $in: ["text", "here"] }});
AbdelHady
quelle
3
Dies half mir auch, ich brauchte es, um eine Objekt-ID in einem Array zu finden, und wo etwas wie $ in: [ObjectId ("4f9f2c336b810d0cf0000017")] fehlschlug, funktionierte $ in: ["4f9f2c336b810d0cf0000017"]
jbnunn
Ist dies besser als eine Schleife des Arrays und eine einzelne Suche () durchzuführen?
Rohit Nair