2016-07-04 10 views
0

次は私がネストされたオブジェクトに関連付けられた値を取得できるようにしたいMongoDB:ネストされたオブジェクトの価値を得るには?

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

を文書であ​​る場合。たとえば、Pythonでは、私はprint(dict_name['a']['t'])を実行します。

私は

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

以下のコマンドの両方にfind()findOne()を試してみましたが、彼らは、正しいデータを返すされていません。

'a'をキーとしてドキュメントを照会し、't'に関連付けられた値を取得し、['a', 'z', 'w', 't']が返されるとはどうでしょうか?

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

これは、あなたが探しているものをあなたを与える必要があります。

+0

を与えた:{ "TS" : "$ at"、_id:0}}]) ' –

+0

' "t"は "a"のキーですので、非idエントリを作成します。例:{"a": "b"、 "val":["a"、 "x"、 "b"]} – dsgdfg

+0

@AliDehghani空白のオブジェクトをたくさん取得する – AlanH

答えて

0

は、次の集約を行うことができます。相続人

基本的に「T」という名前の新しい値に配列「で」あなたのを割り当てるprojectへのリンク、(これは何「T」である:かなり多くの手段「での$」)

+0

その正しいが、その過労ですが。各ドキュメントについて、n個のドキュメントに巻き戻してから、それらを再度グループ化して、元のドキュメントを作成します。なぜ単にプロジェクトを使うのではないのですか? –

+0

頭をアップしてくれてありがとう、上記を編集して、何らかの理由でプロジェクトをやっているだけで作業していなかったのですが、タイプミスがあったかもしれません – devonJS

0

これはいかがですか? :

このテストコレクションで
db.my_collection.aggregate([{"$project":{"_id":"$_id", "t":"$a.t"}}]); 

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

それはどのように `db.collection.aggregate([{$プロジェクトについては私に次のようresult-

{ "_id" : ObjectId("577ba92187630c1a06c4bcac"), "t" : [ 2, 3 ] } 
関連する問題