2016-04-08 66 views
0

這是我的完整文檔,我只需要它的子塊'一個'或'兩個'一次。如何獲取mongoDB中的嵌套元素?

{ 
"_id": ObjectId('12abc'), 
"createdAt": ISODate('2016-04-04T06:04:53.486Z'), 
"updatedAt": ISODate('2016-04-04T06:04:53.486Z'), 
"updatedBy": "SSE", 
"DocName": "doc1", 
"MainObj": { 
    "One": { 
     "color": { 
      "green": [ 
       { 
        "val": "01", 
        "val2": "0" 
       }, 
       { 
        "val": "10", 
        "val2": "5" 
       } 
      ], 
      "result": "0000" 
      } 
     } 

    "Two": { 
     "color1": { 
      "blue": [ 
       { 
        "val": "01", 
        "val2": "0" 
       }, 
       { 
        "val": "10", 
        "val2": "5" 
       } 
      ], 
      "result": "0000" 
      } 
        } 
       } 
} 

這是我的預期塊: 一「:{ 」顏色「:{ 」綠色「: { 」VAL「: 」01「, 」值2「: 「0」 },{ 「VAL」: 「10」, 「val2的」: 「5」 } ], 「結果」: 「0000」 } }}

+0

正如我所見,有一個額外的括號。請檢查併發布正確的收藏。 –

+0

@Himanshu,更正。感謝您指出。 – tiya

回答

0

您可以通過投影子文檔(MainObj.One)到一個名爲一個變量,然後返回只是變量與聚合框架做到這一點。例如:

db.YourCollectionName.aggregate([ 
    {$project:{One:"$MainObj.One"}}, 
    {$project:{_id:0,One:1}} 
]); 

返回此:

{ "One" : { "color" : { "green" : [ { "val" : "01", "val2" : "0" }, { "val" : "10", "val2" : "5" } ], "result" : "0000" } } } 

更多的聚合框架和$project操作:

https://docs.mongodb.org/manual/reference/operator/aggregation/

更新:這裏是代碼,包括createdAt, updatedAt,updatedBy和DocName:

db.YourCollectionName.aggregate([ 
    {$project:{One:"$MainObj.One",createdAt:"$createdAt",updatedAt:"$updatedAt",updatedBy:"$updatedBy",DocName:"$DocName"}}, 
    {$project:{_id:0,One:1,createdAt:1,updatedAt:1,updatedBy:1,DocName:1}} 
]); 

返回:

{ 
    "createdAt" : ISODate("2016-04-04T06:04:53.486Z"), 
    "updatedAt" : ISODate("2016-04-04T06:04:53.486Z"), 
    "updatedBy" : "SSE", 
    "DocName" : "doc1", 
    "One" : { 
     "color" : { 
      "green" : [ { "val" : "01", "val2" : "0" }, { "val" : "10", "val2" : "5" } ], 
      "result" : "0000" 
     } 
    } 
} 

注:一個更簡單的方法來做到這將是如下:

db.YourCollectionName.find({},{createdAt:1,updatedAt:1,updatedBy:1,DocName:1,"MainObj.One":1}); 

唯一不同的是,這將返回One作爲一個子文件的MainObj(這與原始問題中提出的不同):

{ 
    "createdAt" : ISODate("2016-04-04T06:04:53.486Z"), 
    "updatedAt" : ISODate("2016-04-04T06:04:53.486Z"), 
    "updatedBy" : "SSE", 
    "DocName" : "doc1", 
    "MainObj" : { 
     "One" : { 
      "color" : { 
       "green" : [ { "val" : "01", "val2" : "0" }, { "val" : "10", "val2" : "5" } ], 
       "result" : "0000" 
      } 
     } 
    } 
} 
+0

非常感謝Mark。它爲我工作。 – tiya

+0

馬克,你能告訴我如何得到下面的字段以及現有結果字段「createdAt」:ISODate('2016-04-04T06:04:53.486Z'), 「updatedAt」:ISODate('2016-04 -04T06:04:53.486Z'), 「updatedBy」:「SSE」, 「DocName」:「doc1」, – tiya

+0

請參閱我的更新回答,以獲取字段說明。 – markwatsonatx