Mongodb搜索儿童并返回儿童和父母

时间:2017-01-05 01:31:48

标签: mongodb

我是mongodb的新手并尝试查询子元素。 假设我的收藏是这样的:

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

}

我想找到' test4'并返回这样的记录:

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

}

我尝试过$ elementMatch,但它会返回整个reocrd,包括' test3'和' test4'。我怎样才能做到这一点?非常感谢你的帮助!

2 个答案:

答案 0 :(得分:0)

您可以将positional projection operator $用于您的目的。

试试这个:

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

有关位置运算符$ (projection)的更多信息,请浏览MongoDB $(projection) documentation

答案 1 :(得分:0)

我通过这个命令实现了这个目标:

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

我不确定这是否是正确的方法,所以如果有人发现此错误,请随时在此处添加评论。