我有两个文件
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级别,附加数组中还有另一个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
请帮助我!
答案 0 :(得分:2)
您可以使用简单的find()
语句来实现此目的:
Post.find({"user._id":{$in:idArr}},
{"content":1,
"user.avatar":1,
"pub_date":1,
"attach.user.avatar":1})
如果您出于某种原因选择汇总,可以修改aggregation pipeline
,如下所示:
$match
具有特定用户ID的记录。$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
})