MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Operatory porównania MongoDB z wartością null

Szczegóły drobiazgowe

Czytanie najnowszego źródła Mongo /a> , w zasadzie są 2 przypadki, kiedy porównujemy null :

  1. Jeśli typy kanoniczne porównywanych elementów BSON jest różnych, tylko porównania równości (== , >= , <= ) wartości null &undefined zwróci true; w przeciwnym razie każde porównanie z null zwróci false .
    Uwaga: Żaden inny typ BSON nie ma takiego samego typu kanonicznego jak null .
  2. Jeśli typy kanoniczne są takie same (tzn. oba elementy są null ), a następnie compareElementValu jest nazywany. Dla null , to po prostu zwraca różnicę między canonicalL124 wpisz obu elementów BSON, a następnie przeprowadza żądane porównanie z 0 .
    Na przykład null > null przetłumaczyłoby na (5-5) > 0 --> False ponieważ kanoniczny typ null to 5.
    Podobnie null < 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.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zapytanie, aby uzyskać dane z ostatnich X minut za pomocą Mongodb

  2. Grupa Mongodb według pola dbref

  3. MongoDB:Aktualizacja dokumentów przy użyciu danych z tego samego dokumentu

  4. MongoDB $lookup vs Mongoose wypełniać

  5. Dlaczego dodawany jest identyfikator _id z ObjectID podczas używania funkcji $push MongoDB w celu dodania nowego obiektu do tablicy?