Nitty-hrubé podrobnosti
- Pokud cantypes.h a> z porovnávaných prvků BSON se liší, pouze porovnání rovnosti (
==
,>=
,<=
) z null &undefined vrátítrue
; jinak jakékoli srovnání snull
vrátífalse
.
Poznámka: Žádný jiný typ BSON nemá stejný kanonický typ jakonull
. - Pokud cantypes.h a> jsou stejné (tj. oba prvky jsou
null
), poté typ obou prvků BSON a poté provede požadované srovnání s0
.
Napříkladnull > null
by se převedlo na(5-5) > 0 --> False
protože kanonický typ null je 5.
Podobněnull < null
by se převedlo na(5-5) < 0 --> False
.
To znamená null
může být vždy rovno null
nebo undefined
. Jakékoli jiné srovnání zahrnující null
vždy vrátí false
.
Je to chyba?
Aktualizovaná odpověď:
Dokumentace pro operátory porovnání ($gt
, $lt
) odkazuje na dokumentaci, na kterou jste původně odkazovali , což znamená, že operátory porovnání by měly pracovat s null
. Dále řazení dotazů (tj. , db.find().sort()
) dělá přesně dodržujte zdokumentované chování při porovnávání/třídění.
To je přinejmenším nekonzistentní. Myslím, že by stálo za to odeslat hlášení o chybě na stránku JIRA MongoDB .
Původní odpověď:
Nemyslím si, že toto chování je chyba.
obecný konsensus pro Javascript
je to undefined
znamená nepřiřazeno zatímco null
znamená přiřazeno, ale jinak nedefinováno . Porovnání hodnot s nedefinovanými, kromě rovnosti, nedávají smysl, alespoň v matematickém smyslu.
Vzhledem k tomu, že BSON hodně čerpá z JavaScriptu, platí to i pro MongoDB.