Дребни подробности
Четене на последния източник на Mongo , има основно 2 случая, когато се правят сравнения, включващи null
:
- Ако каноничните типове от сравняваните BSON елементи са различни, само сравнения за равенство (
==
,>=код> ,
<=
) от null &undefined ще върнеtrue
; в противен случай всяко сравнение сnull
ще върнеfalse
.
Забележка: Никой друг тип BSON няма същия каноничен тип катоnull
. - Ако каноничните типове са еднакви (т.е. и двата елемента са
null
), след това compareElementValues е наречен. Заnull
, това просто връща разликата между каноничните тип на двата BSON елемента и след това извършва исканото сравнение с0
.
Напримерnull> null
ще се преведе в(5-5)> 0 --> False
защото каноничният тип null е 5.
По същия начин,null
ще се преведе в (5-5) <0 --> False
.
Това означава null
може да бъде равно на null
или недефиниран
. Всяко друго сравнение, включващо null
винаги ще връща false
.
Това грешка ли е?
Актуализиран отговор:
Документацията за операторите за сравнение ($gt
, $lt
) препраща към документацията, която първоначално сте свързали , което означава, че операторите за сравнение трябва работа с null
. Освен това, сортирането на заявки (т.е. , db.find().sort()
) прави следвайте точно документираното поведение за сравнение/сортиране.
Това е най-малкото непоследователно. Мисля, че би си струвало да изпратите доклад за грешка до сайта JIRA на MongoDB .
Оригинален отговор:
Не мисля, че това поведение е грешка.
общ консенсус за Javascript
е това недефинирано
означава неприсвоен докато null
означава присвоено, но иначе недефинирано . Сравненията на стойности с недефинирани, освен равенството, нямат смисъл, поне в математически смисъл.
Като се има предвид, че BSON черпи до голяма степен от JavaScript, това се отнася и за MongoDB.