Suchen Sie Dokumente in MongoDB, deren Arrayfeld eine Teilmenge eines Abfragearrays ist

8

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,

%Vor%

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?

    
duckworthd 19.04.2013, 16:31
quelle

3 Antworten

9

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.

    
Asya Kamsky 19.04.2013 19:04
quelle
8

In MongoDb für Array-Feld:

%Vor%     
diyism 27.03.2014 03:10
quelle
2

Um dies im Kontext der Aggregation zu tun, können Sie $setIsSubset :

%Vor%

Beachten Sie, dass $setIsSubset in MongoDB 2.6 hinzugefügt wurde.

    
JohnnyHK 16.06.2015 17:55
quelle

Tags und Links