2017-01-05 6 views
0

私はmongodbを初めて使っていて、子供の要素を照会しようとしています。 私のコレクションは、このようなものですと仮定しますMongodb子供を検索して子と親を返す

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

} 

私は「TEST4」を見つけて、次のようにレコードを返したい:

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

} 

私が試した$ elementMatchをhavedが、それは両方の「test3を含めた全体reocrdを返します。 'と' test4 '。どうすればこれを達成できますか?助けをありがとう!

答えて

0

positional projection operator $をご利用いただけます。それがある場合、私はわからない

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

:私は、このコマンドによって、これを達成MongoDB $(projection) documentation

+0

コメントありがとうございました!私はこれを試しても、子要素とルート要素の両方が消えてしまった@@@ – afdsdsafadwer

0

通過し、位置オペレータ$ (projection)の詳細については、

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

はこれを試しますこれを行う正しい方法です。誰かがこれでエラーを見つけた場合は、ここにコメントを追加してください。

関連する問題