2011-01-21 14 views
55

Sono nuovo in mongodb e sto provando a interrogare oggetti figlio. Ho una collezione di Stati, e ogni Stato ha Città minori. Una delle città ha una proprietà Name nullo, che causa errori nella mia app. Come posso interrogare le raccolte di stato per trovare città secondarie che hanno un nome == null?come interrogare oggetti figlio in mongodb

+0

La domanda deve chiarire quale linguaggio di programmazione/driver è utilizzato e possibilmente esempi di documenti per rispondere correttamente alle chiamate –

+21

False, sto chiedendo di interrogare direttamente il db, che sia le persone che hanno risposto hanno capito. – Justin

risposta

84

Se è esattamente null (al contrario di non impostato):

db.states.find({"cities.name": null}) 

(ma come fa notare javierfp, corrisponde anche documenti che non hanno le città gamma a tutti, sto supponendo che lo fanno).

Se è il caso che la proprietà non è impostata:

db.states.find({"cities.name": {"$exists": false}}) 

Ho provato quanto sopra con una collezione creata con questi due inserti:

db.states.insert({"cities": [{name: "New York"}, {name: null}]}) 
db.states.insert({"cities": [{name: "Austin"}, {color: "blue"}]}) 

La prima query trova la prima stato, la seconda query trova il secondo. Se si desidera trovare tutti e due con una query è possibile effettuare una $or query:

db.states.find({"$or": [ 
    {"cities.name": null}, 
    {"cities.name": {"$exists": false}} 
]}) 
22

Assumendo che il "stati" collezione è come:

{"name" : "Spain", "cities" : [ { "name" : "Madrid" }, { "name" : null } ] } 
{"name" : "France" } 

La query per trovare gli stati con le città nulli sarebbe :

db.states.find({"cities.name" : {"$eq" : null, "$exists" : true}}); 

E 'un comune errore per interrogare per i null come:

db.states.find({"cities.name" : null}); 

perché questa query restituirà tutti i documenti privi della chiave (nel nostro esempio restituirà Spagna e Francia). Pertanto, se non si è certi che la chiave sia sempre presente, è necessario verificare che la chiave esista come nella prima query.

Problemi correlati