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.