2016-09-07 1 views
0

サンプル収集構造:MongoDBの位置オペレータ

{ 
"_id" : ObjectId("57cfd62001ca2dd672cfebb1"), 
"name" : "Category", 
"parent" : ObjectId("57cfd5d101ca2dd672cfebb0"), 
"posts" : [ 
    { 
     "name" : "Post", 
     "author" : ObjectId("57cfd09401ca2dd672cfebac"), 
     "content" : "Some content.", 
     "comments" : [ 
      { 
       "author" : ObjectId("57cfd09401ca2dd672cfebab"), 
       "content" : "First comment", 
       "rating" : 2 
      }, 
      { 
       "author" : ObjectId("57cfd09401ca2dd672cfebac"), 
       "content" : "Second comment", 
       "rating" : 5 
      } 
     ] 
    } 
] 
} 

私は、そのauthorObjectId("57cfd09401ca2dd672cfebab")すべてcommentsを選択したいと思います。

このクエリでは、作業

db.categories.find({ 'posts.comments.author':ObjectId("57cfd09401ca2dd672cfebab") }) 

が、私は、位置演算子を持つ唯一の最初に一致したコメントを返したいと思います。このようなものは機能しません。 MongoDBは入れ子配列の位置演算子をサポートしていますか?

db.categories.find({ 'posts.comments.author': ObjectId("57cfd09401ca2dd672cfebab") }, 
{ 'posts.comments.$': 1 }) 

答えて

0

かわりに、集約をしてみてください、ネストつ以上のレベル... find()が動作しない場合がありますを持っている: -

> db.categories.aggregate([{$unwind:"$posts"},{$unwind:"$posts.comments"}, 
{$match:{"posts.comments.author":ObjectId("57cfd09401ca2dd672cfebab")}}, 
{$project:{_id:0,"posts.comments":1}}]).pretty() 

出力:

{ 
     "posts" : { 
       "comments" : { 
         "author" : ObjectId("57cfd09401ca2dd672cfebab"), 
         "content" : "First comment", 
         "rating" : 2 
       } 
     } 
} 
関連する問題