Angenommen, ich habe einen Satz von Dokumenten mit einem array
-Feld eingefügt. Ich möchte alle Dokumente so finden, dass ihr array
-Feld eine Teilmenge eines Abfragearrays ist. Zum Beispiel, wenn ich die folgenden Dokumente habe,
und ich frage collection.find({'array': {'$superset': ['a', 'b', 'c']})
, ich würde erwarten, dass die Dokumente one
und three
als ['a', 'b', 'c']
und ['b', 'c']
beide Teilmengen von ['a', 'b', 'c']
sind. Mit anderen Worten, ich möchte die Umkehrung von Mongos $all
-Abfrage ausführen, die alle Dokumente so auswählt, dass das Abfragearray eine Teilmenge des array
-Feldes des Dokuments ist. Ist das möglich? und wenn ja, wie?
Es gibt eine einfache Möglichkeit, dies mit Aggregationsframework oder mit einer Suchabfrage zu tun.
Die Abfrage ist einfach, aber Sie müssen $ elemMatch operator verwenden:
%Vor%Beachten Sie, dass dies bedeutet, dass wir nicht mit einem Array übereinstimmen wollen, das ein Element hat, das (gleichzeitig) nicht gleich 'a', 'b' oder 'c' ist. Ich habe eine Projektion hinzugefügt, die nur das Namensfeld des resultierenden Dokuments zurückgibt, das optional ist.
Um dies im Kontext der Aggregation zu tun, können Sie $setIsSubset
Beachten Sie, dass $setIsSubset
in MongoDB 2.6 hinzugefügt wurde.
Tags und Links mongodb