Parece que no puedo reproducir esto. ¿Qué versión de Mongo estás usando? (Estoy usando 2.1.1-pre) Aquí están los pasos que tomé. La siguiente es de la cáscara 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"
}
}
]
Sólo el documento que contiene "pic.status": se devuelve "algo".
Mi único pensamiento es, ¿estás absolutamente seguro de que el valor de (nulo) en la consulta es el mismo que el guardado en los documentos? ¿Se guardaron los documentos usando el shell JS, o se guardaron usando un controlador en un idioma diferente? Teóricamente, nulo, debe ser nulo, debe ser nulo, en cualquier idioma, pero sé que los diferentes idiomas representan "ningún valor" de manera diferente. En python, por ejemplo, el valor para "sin valor" es (Ninguno). (nulo) no se reconoce en python.
En una cáscara de pitón, I trataron de guardar un documento con (null) como un valor, pero ha recibido un error:
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
entonces Inserté (con la cáscara Python) un estado de 'nulo' ('nulo' siendo una cadena)
In [15]: coll.save({"_id":5, "pic":{"id":5, "status":'null'}})
Out[15]: 5
No es de extrañar, cuando volvió a ejecutar la consulta en la cáscara JS, fue devuelto este documento, porque 'nulo'! = 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
}
}
]
¿Es esto similar a lo que está experimentando o puede reproducirlo al 100% en el depósito JS? ¡Con suerte, podremos llegar a la raíz de este problema!
Solo quería decir que he podido "reproducir" esto en mi propia instalación. Estaba usando mapReduce para generar una colección. Cuando ejecuto: 'db.analysis.find ({'value.ds': {$ exists: true}, 'value.ds ': {$ ne: null}}) 'Me saludan con ' {"_id": "", "value": {"ds": null, "ro": null}} {"_id ": "00003262a3a6c8b50b470f4021812aef13e079a89756dcafbc5efa1168632548", "valor": { "DS": null, "ro": null}} { "_id": "0000ddd5f3845f44631651719c846c42dffe7001816c53a7aa8814b1d61c1017", "valor": { "DS": null, "ro": null }} ' – awshepard
El problema desapareció después de volver a instalar Mongo. No estoy seguro de qué pudo haberlo causado. Estoy seguro de que era un valor nulo, pero gracias por la respuesta Marc. Tu primer ejemplo funciona sin problemas para mí ahora. –