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

Я не уверен, если это правильный способ сделать это, поэтому, если кто-то найдет ошибку в этом, вы можете добавить комментарий здесь.

Смежные вопросы