Дребни подробности
Четене на последния източник на 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.