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

MongoDB-Vergleichsoperatoren mit null

Kleine Details

Durchlesen der neueste Mongo-Quelle , gibt es grundsätzlich 2 Fälle, in denen Vergleiche mit null durchgeführt werden :

  1. Wenn die kanonische Typen der verglichenen BSON-Elemente unterschiedlich sind, nur Gleichheitsvergleiche (== , >= , <= ) von null &undefined gibt true zurück; ansonsten jeglicher Vergleich mit null gibt false zurück .
    Hinweis: Kein anderer BSON-Typ hat denselben kanonischen Typ wie null .
  2. Wenn die kanonische Typen sind gleich (d.h. beide Elemente sind null ), dann Elementwerte vergleichen wird genannt. Für null , gibt dies nur die Differenz zwischen dem canonical zurück Typ beider BSON-Elemente und führt dann den gewünschten Vergleich gegen 0 durch .
    Zum Beispiel null > null würde in (5-5) > 0 --> False übersetzen weil der kanonische Typ von null 5 ist.
    Ähnlich null < 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.