Я не могу воспроизвести это.Какую версию Mongo вы используете?(Я использую 2.1.1-pre) Вот шаги, которые я предпринял.Следующее из оболочки JS:
> db.users.save({
"_id" : 1,
"pic" : {
"id" : "4f1e1ab9cdf9dbaa160000be",
"status" : null
}
});
> db.users.save({
"_id" : 2,
"pic" : {
"id" : "4f1e28480eaf38193d00006e",
"status" : null
}
});
> db.users.save({
"_id" : 3,
"pic" : {
"id" : "4f1e28480eaf38193d00006e",
"status" : "Something"
}
});
> db.users.find({"pic.status":{$ne:null}}, {pic:1}).toArray()
[
{
"_id" : 3,
"pic" : {
"id" : "4f1e28480eaf38193d00006e",
"status" : "Something"
}
}
]
Только документ, содержащий «pic.status»: «Something» возвращается.
Моя единственная мысль: вы абсолютно уверены, что значение (null) в запросе совпадает с тем, которое сохраняется в документах?Были ли документы сохранены с использованием оболочки JS или они были сохранены с использованием драйвера на другом языке?Теоретически, null, должно быть null, должно быть null, на любом языке, но я знаю, что разные языки представляют «нет значения» по-разному.Например, в python значением для «no value» является (None).(ноль) не распознается в Python.
В оболочке Python я попытался сохранить документ со значением (null) в качестве значения, но получил ошибку:
In [13]: coll.save({"_id":5, "pic":{"id":5, "status":null}})
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/Users/mbastien/mongodb-osx-x86_64-2.0.1/bin/<ipython-input-13-1ad232456c88> in <module>()
----> 1 coll.save({"_id":5, "pic":{"id":5, "status":null}})
NameError: name 'null' is not defined
Затем я вставил (с оболочкой Python) статусиз 'null' ('null' - строка)
In [15]: coll.save({"_id":5, "pic":{"id":5, "status":'null'}})
Out[15]: 5
Не удивительно, что когда я перезапустил запрос в оболочке JS, этот документ был возвращен, потому что 'null'! = null
> db.users.find({"pic.status":{$ne:null}}, {pic:1}).toArray()
[
{
"_id" : 3,
"pic" : {
"id" : "4f1e28480eaf38193d00006e",
"status" : "Something"
}
},
{
"_id" : 5,
"pic" : {
"status" : "null",
"id" : 5
}
}
]
Это похоже на то, что вы испытываете, или вы можете воспроизвести это 100% в оболочке JS?Надеемся, мы сможем добраться до корня этой проблемы!