2016-11-18 2 views
0

ich diese Datenstruktur haben:Objekt suchen Objekt Rückkehr MongoDB keine Werte

{ 
"_id" : ObjectId("582ecaa97be792282ca31bc4"), 
"hero" : { 
    "5001" : { 
     "id" : 5001 
     "name" : "Rogue" 
      } 
    "5002" : { 
     "id" : 5002 
     "name" : "Mage" 
      } 
    "5003" : { 
     "id" : 5002 
     "name" : "Paladin" 
      } 
     } 
} 

ich die Abfrage haben.

db.getCollection('hero').find({"Hero":{"5001":{"id" : 5001}}}) 

Es gibt 0 Ergebnisse zurück. Ich könnte die Heros separat speichern, aber ich würde gerne wissen, wie man diese Abfrage zuerst macht. Was ich hier herausholen möchte, sind alle Daten unter 5001, wenn ich mit 5001 abfrage und so weiter.

Danke!

Edit: Ich fand die Antwort mit Punktnotation, ich habe bereits Punktnotation versucht, aber ich habe es ein bisschen falsch, wenn ich es versuchte, dachte ich, es war nur für Arrays. Hier ist, was Sie tun würden, wenn jemand anderes sucht.

db.Runes.find({ "hero.5001.id": 5001 },{"hero.5001":1}) 
+0

Ich habe Sie benötigen eine Dokumentstruktur ändern und machen 'eine Reihe von Subdokumente hero'. – styvane

+0

Sicher werde ich das auch tun, danke! – Djinnes

Antwort

1

Zu allererst Alle Felder sind Groß- und Kleinschreibung, so dass Sie nicht ein „Held“ Feld mit „Hero“ abfragen.

Sekunden, wenn Sie verschachtelte Dokumente abfragen, sollten Sie die „Punktnotation“ verwenden

https://docs.mongodb.com/manual/core/document/#dot-notation

so die richtige Art und Weise zu Ihrem diesem Dokument sein wird.

db.getCollection('hero').find({"hero.5001.id" : 5001}) 

es wird das gesamte Dokument zurückgeben. Also wird das gesamte Heldenobjekt mit den Schlüsseln 5002 und 5003 auch zurückkehren, da sie zum selben Dokument gehören. Sie können die Projektion verwenden, um nur die erforderlichen Felder zu projizieren. , die wie unten

db.getCollection('hero').find({"hero.5001.id": 5001},{"hero.5001" : 1}) 

sind hier getan werden kann, weitere Informationen über MongoDB Abfrage und Projektionsoperatoren https://docs.mongodb.com/v3.2/reference/operator/query/

0

Gerade diese versuchen

db.getCollection('hero').find({"hero.5001.id" : 5001})