Szczegóły drobiazgowe
Czytanie najnowszego źródła Mongo /a> , w zasadzie są 2 przypadki, kiedy porównujemy null
:
- Jeśli typy kanoniczne porównywanych elementów BSON jest różnych, tylko porównania równości (
==
,>=
,<=
) wartości null &undefined zwrócitrue
; w przeciwnym razie każde porównanie znull
zwrócifalse
.
Uwaga: Żaden inny typ BSON nie ma takiego samego typu kanonicznego jaknull
. - Jeśli typy kanoniczne są takie same (tzn. oba elementy są
null
), a następnie compareElementValu jest nazywany. Dlanull
, to po prostu zwraca różnicę między canonicalL124 wpisz obu elementów BSON, a następnie przeprowadza żądane porównanie z0
.
Na przykładnull > null
przetłumaczyłoby na(5-5) > 0 --> False
ponieważ kanoniczny typ null to 5.
Podobnienull < null
przetłumaczyłoby na(5-5) < 0 --> False
.
Oznacza to null
może być zawsze równe null
lub undefined
. Wszelkie inne porównania dotyczące null
zawsze zwróci false
.
Czy to błąd?
Zaktualizowana odpowiedź:
Dokumentacja operatorów porównania ($gt
, $lt
) odwołuje się do dokumentacji, do której pierwotnie linkujesz , co oznacza, że operatory porównania powinny pracuj z null
. Ponadto sortowanie zapytań (tj. , db.find().sort()
) tak dokładnie postępuj zgodnie z udokumentowanym zachowaniem porównywania/sortowania.
To przynajmniej jest niespójne. Myślę, że warto zgłosić błąd na stronie MongoDB JIRA .
Oryginalna odpowiedź:
Nie sądzę, że to zachowanie jest błędem.
ogólny konsensus dotyczący JavaScript
czy to undefined
oznacza nieprzypisany podczas gdy null
oznacza przypisane, ale poza tym niezdefiniowane . Porównywanie wartości z niezdefiniowaną, poza równością, nie ma sensu, przynajmniej w sensie matematycznym.
Biorąc pod uwagę, że BSON czerpie dużo z JavaScript, dotyczy to również MongoDB.