2017-01-05 61 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() 

我不知道这是否是正确的方法来做到这一点,如果有人发现错误,请随时在这里添加评论。