在mongodb中排除子文档数组中的字段

我有两个文件

image文件:

 {_id:123,user:{user_sub_docuemnt},thumb:'dqwdqwdqwdw'} 

post文档:

 {_id:444, user:{user_sub_document}, attach:[{_id:123, user:{user_sub_docuemnt}, thumb:'dqwdqwdqwdw'} ] } 

user_sub_document包含password字段,所以我需要排除该字段。

这是我迄今为止:

 Post.aggregate([ {$match: {'user._id': {$in:idArr}}}, {$project:{content:1,attach:1,pub_date:1,'user.avatar':1}}, ],function(err,posts){ if(err){ throw err }else{ res.send(posts) } }) 

这只会限制Post级别的用户,在attach数组中还有另一个user_sub_document,所以我试了这个

 {$project:{content:1,attach:1,'attach.user':0,pub_date:1,'user.avatar':1}}, 

这会给我一个错误The top-level _id field is the only field currently supported for exclusion

请在这件事上给予我帮助!

你可以通过一个简单的find()语句来实现:

 Post.find({"user._id":{$in:idArr}}, {"content":1, "user.avatar":1, "pub_date":1, "attach.user.avatar":1}) 

如果您select聚合出于某种原因,您可以修改您的aggregation pipeline ,如下所示:

  • $match将logging与特定的用户ID相$match
  • $project只有必填字段。

码:

 Post.aggregate([ {$match:{"user._id":{$in:idArr}}}, {$project:{"user.avatar":1, "attach.user.avatar":1, "pub_date":1, "content":1}}],function(err,resp){ // handle response })