2016-07-04 18 views
0

Wenn das folgende Dokument istMongoDB: Wie erhält man den Wert eines verschachtelten Objekts?

{ 'a': { 
     'b': ['a', 'x', 'b'], 
     't': ['a', 'z', 'w', 't'] 
     } 
} 

Ich möchte den Wert mit dem verschachtelten Objekt zugeordnet erhalten können. Zum Beispiel, in Python würde ich print(dict_name['a']['t']) tun.

Ich habe find() und findOne() auf beiden der Befehle unter

versucht
db.my_collection.find({}, { 'a.t': 1 }) 
db.my_collection.find({ 'a.t': {$exists: 'true} }) 

aber sie haben die richtigen Daten zurückkehrt nicht.

Wie kann ich für das Dokument mit 'a' als Schlüssel anfordern, dann das Dokument, erhalten Sie den Wert 't', erwartet ['a', 'z', 'w', 't'] zurückgegeben werden?

+0

Wie wäre es 'db.collection.aggregate ([{$ Projekt: { "ts" : "$ at", _id: 0}}]) ' –

+0

' "t" ist ein Schlüssel für "a" ', so dass Sie nicht-ID-Eintrag erstellen, schlechte Idee cos immer den ganzen Eintrag aufrufen müssen. Beispiel: {"a": "b", "val": ["a", "x", "b"]} – dsgdfg

+0

@AliDehghani Ich bekomme eine Reihe von leeren Objekten – AlanH

Antwort

0

Sie können folgende Aggregation tun:

db.collection.aggregate([ 
    { 
     $project: { 
      '_id': '$_id', 
      't': '$a.t' 
     } 
    } 
]) 

Dies sollte Sie geben, was Sie suchen.

Heres ein Link zu project, im Grunde Ihre 'at' Array auf einen neuen Wert zuweisen namens 't' (das ist, was 't': '$ an' ziemlich Mittel)

+0

Obwohl es korrekt ist, aber es ist ein Overkill. Für jedes Dokument müssen Sie es in n Dokumente auflösen und sie dann mit nur wenigen vorhandenen Tasten erneut zu dem ursprünglichen Dokument gruppieren. Warum nicht einfach ein Projekt verwenden? –

+0

danke für die heads-up, bearbeitet das oben, aus irgendeinem Grund war es nicht funktioniert an meinem Ende, das Projekt nur, aber ich habe vielleicht einen Tippfehler – devonJS

0

Wie wäre es damit? :

db.my_collection.aggregate([{"$project":{"_id":"$_id", "t":"$a.t"}}]); 

Auf dieser Test Sammlung

{ 
     "_id" : ObjectId("577ba92187630c1a06c4bcac"), 
     "a" : { 
       "b" : [ 
         1, 
         2 
       ], 
       "t" : [ 
         2, 
         3 
       ] 
     } 
} 

Es gab mir die folgende result-

{ "_id" : ObjectId("577ba92187630c1a06c4bcac"), "t" : [ 2, 3 ] } 
Verwandte Themen