2016-08-18 1 views
1

So ziemlich neu und absolut ungebildet auf MongoDB.MongoDB findet Schlüssel auf verschachteltem Objekt KEY (JSON)

Mit dieser JSON Struktur:

{ 
"id": "123456", 
"makes": { 
    "abc": { 
     "att1": 4, 
     "att2": "fffff", 
     "att3": 46 
     }, 
    "fgh": { 
     "att1": 8, 
     "att2": "ggggg", 
     "att3": 6 
    }, 
    "rty": { 
     "att1": 3, 
     "att2": "hhhh", 
     "att3": 4 
     }, 
    "iop": { 
     "att1": 4, 
     "att2": "llll", 
     "att3": 3 
     } 
} 

}

wie kann ich die DB für "fgh" machen abfragen? Ich habe versucht:

db.<myCollection>.find({"makes":"fgh"}) 

aber das funktioniert nicht. Es funktioniert gut, wenn ich schreibe:

db.<myCollection>.find({"makes.fgh.att1":8}) 

Ihnen im Voraus danken!

Antwort

3

Wenn Sie versuchen, make.fgh abzufragen, führen Sie keine Abfrage für den Inhalt durch, sondern für die Struktur, da "fgh" kein Wert, sondern ein Unterdokument ist.

Sie können dies erreichen mit einem $ Suche besteht:

db.myCollection.find({ "makes.fgh" : { $exists : true } }) 

https://docs.mongodb.com/manual/reference/operator/query/exists/ Getreu Siehe.

Wenn Sie daran interessiert sind nur in dass Teildokument, Sie können auch eine Projektion auf den Fund hinzufügen:

db.myCollection.find({ "makes.fgh" : { $exists : true }}, { "makes.fgh" : 1 }) 

Werfen Sie einen Blick auf https://docs.mongodb.com/manual/reference/method/db.collection.find/#db.collection.find

Um @ chridam der hilfreichen Kommentar zu integrieren für Details.

+1

Erwähnenswert ist auch die Projektion des Filialdokuments nach der Abfrage 'db. .find ({" make.fgh ": {" $ exists ": true}}, {" makes.fgh ": 1}) ' – chridam

+1

Ja, richtig. Bearbeitete die Antwort, um diese Tatsache einzuschließen. – mtj

+0

Es macht jetzt mehr Sinn, danke für Ihre Hilfe! – Zenigata

Verwandte Themen