gpt4 book ai didi

node.js - 排除mongodb中子文档数组中的字段

转载 作者:可可西里 更新时间:2023-11-01 10:29:42 27 4
gpt4 key购买 nike

我有两个文件

图片文档:

{_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

请帮我解决这个问题!

最佳答案

您可以使用简单的 find() 语句实现此目的:

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

如果您出于某种原因选择聚合,您可以修改您的聚合管道,如下所示:

  • $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
})

关于node.js - 排除mongodb中子文档数组中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28495622/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com