MongoDB rozróżnia między undefined a null

Sprawdzałem logikę zapytań o wartości nie-wartościowe i zauważyłem, gdy używammongo powłoki, to odróżniaundefined inull wartości.

> use test
> db.test.insert({ a : 1,          b : null,       c : undefined })
> db.test.insert({ a : null,       b : undefined,  c : 1 })
> db.test.insert({ a : undefined,  b : 1,          c : null })

Gdy zapytasz o kolekcję, otrzymasz to:

> db.test.find()
{ "_id" : ObjectId("52d95575c9333565e80ccb22"), "a" : 1, "b" : null, "c" : null }
{ "_id" : ObjectId("52d9557fc9333565e80ccb23"), "a" : null, "b" : null, "c" : 1 }
{ "_id" : ObjectId("52d95586c9333565e80ccb24"), "a" : null, "b" : 1, "c" : null }

Gdy pytasz dalejnull jednak pobiera tylko rekordy, które zostały jawnie ustawionenull.

> db.test.find({ a : null })
{ "_id" : ObjectId("52d9557fc9333565e80ccb23"), "a" : null, "b" : null, "c" : 1 }

Czy to błąd w MongoDB?Jak mogę poprawnie zapytać o pola puste / niezdefiniowane / niezaznaczone?

EDYTOWAĆ

W ten sposób mogę zapytać o wartości nie ustawione, używając:

db.test.find({ $or : [ { a : null }, { a : { $exists : false } } ] })

Jednak w tym przykładzie nadal zwraca tylko pojedynczy rekord:

{ "_id" : ObjectId("52d9557fc9333565e80ccb23"), "a" : null, "b" : null, "c" : 1 }

Każdy wie, dlaczego / w jaki sposób MongoDB rozróżniaundefined inull? Czy jest to problem z wprowadzaniem danych w MongoDB?

questionAnswers(2)

yourAnswerToTheQuestion