MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Geben Sie mehrere Kriterien für Array-Elemente an

Um zu verstehen, was die Dokumentation sagt, müssen Sie zuerst verstehen, wie Bereichsabfragen mit Arrays funktionieren.

Angenommen, Sie haben das folgende Dokument in Ihrer Sammlung:

{ "finished" : [ 27, 3 ] },
{ "finished" : 17 }

Die erste Abfrage:

db.users.find( { "finished": { "$elemMatch": { "$gt": 15, "$lt": 20 } } } )

Gibt das Dokument nur zurück, wenn "Fertig" ein Array ist. Das liegt daran, dass $elemMatch Operator stimmt nur mit Dokumenten überein, in denen das Feld ein Array ist und in denen ein einzelnes Element alle Abfragekriterien erfüllt.

Aber die zweite Abfrage:

db.users.find( { "finished": { "$gt": 15, "$lt": 20 } } )

wird beide Dokumente zurückgeben, was wahrscheinlich nicht das ist, was Sie als 27 wollen größer als 20 ist und 3 ist kleiner als 15 . Das liegt daran, dass 27 entspricht den ersten Kriterien und 3 der Zweite. Dieses Verhalten wird in der Dokumentation erwähnt.

...ein Element kann die Bedingung größer als 15 und ein anderes Element die Bedingung kleiner als 20 erfüllen, oder ein einzelnes Element kann beide erfüllen:

Schlussfolgerung:

Bereichsabfragen für Arrays werden bis zu einem oder mehreren Elementen im Array übereinstimmen, die alle Abfragekriterien erfüllen.

Lektion:

Verwenden Sie keine Bereichsabfrage mit Arrays. Sie erhalten ein unerwartetes Ergebnis.