2016-07-04 1 views
0

Si ce qui suit est le documentMongoDB: Comment obtenir la valeur d'un objet imbriqué?

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

Je veux être en mesure d'obtenir la valeur associée à l'objet imbriqué. Par exemple, en python, je ferais print(dict_name['a']['t']).

J'ai essayé find() et findOne() sur les deux commandes ci-dessous

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

mais ils ne sont pas retourner les données correctes.

Comment puis-je demander pour le document 'a' en tant que clé, puis ce document, obtenir la valeur associée à 't', en attendant ['a', 'z', 'w', 't'] à renvoyer?

+0

suivante Que diriez-vous 'db.collection.aggregate ([{projet $: { "ts" : "$ at", _id: 0}}] ' –

+0

' "t" est une clé pour "a" ', donc vous créez une entrée non-id, une mauvaise idée cos doit toujours appeler une entrée entière. Ex: {"a": "b", "val": ["a", "x", "b"]} – dsgdfg

+0

@AliDehghani Je reçois un tas d'objets vierges – AlanH

Répondre

0

Vous pouvez faire l'agrégation suivante:

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

Cela devrait vous donner ce que vous recherchez.

Heres un lien vers project, attribuant essentiellement votre 'au' tableau à une nouvelle valeur nommée 't' (c'est ce que 't': '$ à' signifie à peu près)

+0

Bien que ce soit correct mais c'est une exagération. Pour chaque document, vous le décompressez sur n documents, puis vous les regroupez de nouveau pour former le document que vous aviez à l'origine avec seulement quelques touches. Pourquoi ne pas simplement utiliser le projet? –

+0

merci pour les heads up, édité le ci-dessus, pour une raison quelconque, il ne travaillait pas sur ma fin de faire le projet seulement, mais j'ai peut-être eu une faute de frappe – devonJS

0

Que diriez-vous de cela? :

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

Sur cette collection test

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

Il m'a donné l'result-

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