MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB оператори за сравнение с null

Дребни подробности

Четене на последния източник на Mongo , има основно 2 случая, когато се правят сравнения, включващи null :

  1. Ако каноничните типове от сравняваните BSON елементи са различни, само сравнения за равенство (== , >= , <= ) от null &undefined ще върне true; в противен случай всяко сравнение с null ще върне false .
    Забележка: Никой друг тип BSON няма същия каноничен тип като null .
  2. Ако каноничните типове са еднакви (т.е. и двата елемента са 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.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. node.js база данни

  2. Създаване на MongoDB уникален ключ с C#

  3. Филтрирайте масива с помощта на оператора $in на етап $project

  4. Как да върнете поддокументи от обект в масив с Meteor и MongoDB

  5. mongoose рекурсивно попълване