Kleine Details
Durchlesen der neueste Mongo-Quelle , gibt es grundsätzlich 2 Fälle, in denen Vergleiche mit null
durchgeführt werden :
- Wenn die kanonische Typen der verglichenen BSON-Elemente unterschiedlich sind, nur Gleichheitsvergleiche (
==
,>=
,<=
) von null &undefined gibttrue
zurück; ansonsten jeglicher Vergleich mitnull
gibtfalse
zurück .
Hinweis: Kein anderer BSON-Typ hat denselben kanonischen Typ wienull
. - Wenn die kanonische Typen sind gleich (d.h. beide Elemente sind
null
), dann Elementwerte vergleichen wird genannt. Fürnull
, gibt dies nur die Differenz zwischen dem canonical zurück Typ beider BSON-Elemente und führt dann den gewünschten Vergleich gegen0
durch .
Zum Beispielnull > null
würde in(5-5) > 0 --> False
übersetzen weil der kanonische Typ von null 5 ist.
Ähnlichnull < null
würde in(5-5) < 0 --> False
übersetzen .
Das bedeutet null
kann immer nur gleich null
sein oder undefined
. Jeder andere Vergleich mit null
wird immer false
zurückgeben .
Ist das ein Fehler?
Aktualisierte Antwort:
Die Dokumentation für die Vergleichsoperatoren ($gt
, $lt
) verweist auf die Dokumentation, die Sie ursprünglich verlinkt haben , was impliziert, dass die Vergleichsoperatoren sollten mit null
arbeiten . Außerdem kann die Abfragesortierung (d.h. , db.find().sort()
) macht Befolgen Sie genau das dokumentierte Vergleichs-/Sortierverhalten.
Das ist zumindest widersprüchlich. Ich denke, es wäre sinnvoll, einen Fehlerbericht an MongoDBs JIRA-Website zu senden .
Ursprüngliche Antwort:
Ich glaube nicht, dass dieses Verhalten ein Fehler ist.
Der allgemeiner Konsens für Javascript
ist das undefined
bedeutet nicht zugewiesen während null
bedeutet zugewiesen, aber ansonsten undefiniert . Wertvergleiche gegen undefined, abgesehen von der Gleichheit, machen zumindest im mathematischen Sinne keinen Sinn.
Da BSON sich stark an JavaScript orientiert, gilt dies auch für MongoDB.