2016-09-07 112 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 
      } 
     ] 
    } 
] 
} 

我想选择所有commentsauthorObjectId("57cfd09401ca2dd672cfebab")

此查询工作,

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 
       } 
     } 
}