Frage Mongodb finden durch mehrere Array-Elemente


Wenn ich einen solchen Eintrag habe;

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

Wie kann ich mehrere Wörter in MongoDB abgleichen? Wenn ich ein einzelnes Wort zusammenfasse, kann ich dies tun;

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

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

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

Ich schätze, dass bei Verwendung eines Arrays versucht wird, das gesamte Array mit dem im Datensatz zu vergleichen, anstatt den einzelnen Inhalten zu entsprechen.


75
2017-11-16 01:25


Ursprung


Antworten:


Hängt davon ab, ob Sie versuchen, Dokumente wo zu finden words enthält beide Elemente (text und here) verwenden $all:

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

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

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

125
2017-11-16 01:32