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 gibttruezurück; ansonsten jeglicher Vergleich mitnullgibtfalsezurü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 gegen0durch .
Zum Beispielnull > nullwürde in(5-5) > 0 --> Falseübersetzen weil der kanonische Typ von null 5 ist.
Ähnlichnull < nullwü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.