2017-01-05 84 views
0

我是新來的mongodb並嘗試查詢子元素。 假設我的收藏是這樣的:Mongodb搜索兒童並返回子女和父母

{ 
    name: "test1", 
    children:[ 
     { 
      name:"test2", 
      children:[ 
       { 
         name:"test3" 
       }, 
       { 
         name:"test4" 
       } 
      ] 
     } 
    ] 

} 

我想找到「TEST4」,返回的記錄是這樣的:

{ 
    name: "test1", 
    children:[ 
     { 
      name:"test2", 
      children:[ 
       { 
         name:"test4" 
       } 
      ] 
     } 
    ] 

} 

我haved試過$ elementMatch但它返回整個reocrd既包括「TEST3 '和'test4'。我怎樣才能做到這一點?非常感謝你的幫助!!

回答

0

您可以使用positional projection operator $爲您的目的。

試試這個:

db.collection_name 
    .find({'children.children.name' : givenName},{'children.children.$' : 1}); 

對位置操作$ (projection)更多信息,請通過MongoDB $(projection) documentation

+0

非常感謝您的評論!我試過這個,仍然有兩個孩子元素和根元素消失@@ – afdsdsafadwer

0

我通過這個命令來實現這一點:

db.product_profile_menu.aggregate([ 
{ $match: { 
    children: {$elemMatch: {children: {$elemMatch: {name: "test4"}}}} 
}}, 
{ $unwind: "$children"}, 
{ $unwind: "$children.children"}, 
{ $match: {"children.children.name":"test4"}}]).pretty() 

我不知道這是否是正確的方法來做到這一點,如果有人發現錯誤,請隨時在這裏添加評論。