Non riesco a riprodurre questo. Quale versione di Mongo stai usando? (Sto usando 2.1.1-pre) Ecco i passaggi che ho seguito. Il seguente è dalla shell 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"
}
}
]
Solo il documento contenente "pic.status": "Qualcosa" viene restituito.
Il mio unico pensiero è, sei assolutamente certo che il valore di (null) nella query è lo stesso di quello che viene salvato nei documenti? I documenti sono stati salvati utilizzando la shell JS oppure sono stati salvati utilizzando un driver in una lingua diversa? Teoricamente, null, dovrebbe essere nullo, dovrebbe essere nullo, in qualsiasi lingua, ma so che linguaggi diversi rappresentano "nessun valore" in modo diverso. Ad esempio, in python il valore per "nessun valore" è (Nessuno). (null) non è riconosciuto in python.
In un guscio pitone, ho tentato di salvare un documento con (null) come valore, ma ha ricevuto un errore:
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
Ho poi inserito (con il guscio Python) uno stato di 'nullo' ('nullo' essere una stringa)
In [15]: coll.save({"_id":5, "pic":{"id":5, "status":'null'}})
Out[15]: 5
Non sorprendentemente, quando reran la query nel guscio JS, questo documento è stato restituito, perché 'nullo'! = 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
}
}
]
È simile a quello che stai vivendo o puoi riprodurre questo 100% nella shell JS? Speriamo che saremo in grado di arrivare alla radice di questo problema!
Volevo solo dire che sono stato in grado di "riprodurlo" nella mia installazione. Stavo usando mapReduce per generare una collezione. Quando eseguo: 'db.analysis.find ({'value.ds': {$ exists: true}, 'valore.ds ': {$ ne: null}}) 'Sono stato accolto con ' {"_id": "", "valore": {"ds": null, "ro": null}} {"_id ": "00003262a3a6c8b50b470f4021812aef13e079a89756dcafbc5efa1168632548", "valore": { "DS": null, "ro": null}} { "_id": "0000ddd5f3845f44631651719c846c42dffe7001816c53a7aa8814b1d61c1017", "valore": { "DS": null, "ro": null }} ' – awshepard
Il problema è andato via dopo aver reinstallato Mongo. Non sono sicuro di cosa potrebbe averlo causato. Sono sicuro che era un valore nullo corretto, ma grazie per la risposta Marc. Il tuo primo esempio funziona perfettamente per me ora. –