Ich kann nicht scheinen, dies zu reproduzieren. Welche Version von Mongo verwendest du? (Ich benutze 2.1.1-pre) Hier sind die Schritte, die ich gemacht habe. Hier finden Sie von der JS-Shell:
> 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"
}
}
]
Nur das Dokument mit "pic.status": "Something" zurückgeführt wird.
Mein einziger Gedanke ist, sind Sie absolut sicher, dass der Wert von (null) in der Abfrage derselbe ist, was in den Dokumenten gespeichert ist? Wurden die Dokumente mit der JS-Shell gespeichert oder wurden sie mit einem Treiber in einer anderen Sprache gespeichert? Theoretisch sollte null, sollte null sein, in jeder Sprache, aber ich weiß, dass verschiedene Sprachen "keinen Wert" anders darstellen. In Python zum Beispiel ist der Wert für "kein Wert" (None). (null) wird in Python nicht erkannt.
In einem Python-Shell, habe ich versucht, ein Dokument mit (null) als ein Wert zu speichern, sondern einen Fehler empfangen:
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
I dann (mit dem Python Shell) eingefügt, um einen Status von 'null' ('null' ist ein String)
In [15]: coll.save({"_id":5, "pic":{"id":5, "status":'null'}})
Out[15]: 5
Es überrascht nicht, wenn ich die Abfrage in der JS Shell reran, dieses Dokument zurückgegeben wurde, weil '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
}
}
]
Ist das ähnlich wie bei Ihnen, oder können Sie diese 100% in der JS-Shell reproduzieren? Hoffentlich werden wir in der Lage sein, dieses Problem zu lösen!
Ich wollte nur sagen, dass ich das in meiner eigenen Installation "reproduzieren" konnte. Ich habe mapReduce verwendet, um eine Sammlung zu generieren. Wenn ich renne: 'db.analysis.find ({'value.ds': {$ exists: true}, 'value.ds ': {$ ne: null}}) 'Ich werde mit begrüßt' {"_id": "", "Wert": {"ds": null, "ro": null}} {"_id ": "00003262a3a6c8b50b470f4021812aef13e079a89756dcafbc5efa1168632548", "Wert": { "ds": null, "ro": null}} { "_id": "0000ddd5f3845f44631651719c846c42dffe7001816c53a7aa8814b1d61c1017", "Wert": { "ds": null, "ro": null }} ' – awshepard
Das Problem ging weg, nachdem ich Mongo neu installiert habe. Nicht sicher, was es verursacht haben könnte. Ich bin sicher, es war ein richtiger Nullwert, aber danke für die Antwort Marc. Dein erstes Beispiel funktioniert jetzt einwandfrei für mich. –