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