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?