【发布时间】:2021-08-04 15:18:06
【问题描述】:
我有这个用户和帖子集合以及嵌入式文档comments 和replies:
- 用户
{
_id:34
name:"dimer"
}
- 帖子
{
_id:"1234",
body:" hello ! I love mongodb, but its hard",
likes:["34"],
comments:{
_id:"3453",
body:"me I don't like mongodb i like sql "
likes:["34"],
replies:{
_id:"2345",
body:"both of them are great"
likes:["34"],
}
}
}
问题是,我想聚合到帖子中并获取所有帖子,然后我想将新的键值附加到帖子、cmets、回复中,女巫会指定用户是否喜欢帖子:liked:true
注意:我已经准备好经过身份验证的用户 ID。我想检查每个子树(帖子、cmets、回复)上的likes 文档中是否存在用户 ID
为了更具体地了解这个问题,这是我预期的谦虚结果:
{
_id:"1234",
body:" hello ! I love mongodb, but its hard",
liked:true,
likesCount:1
comments:{
_id:"3453",
body:"me I don't like mongodb i like sql "
liked:true,
likesCount:1
replies:{
_id:"2345",
body:"both of them are great"
liked:true,
likesCount:1
}
}
}
注意:如果您可以帮助查询 cmets,对我来说没问题: 预期结果:
{
_id:"1234",
body:" hello ! I love mongodb, but its hard",
liked:true,
likesCount:1
comments:{
_id:"3453",
body:"me I don't like mongodb i like sql "
liked:true,
likesCount:1
}
}
这是我尝试过的,根本不起作用:
const result = await PostModel.aggregate([
{
$project: {
likesCount: { $size: "$likes" },
commentsCount: { $size: "$comments" },
liked: { $in: [ID(uid), "$likes"] },
likes: 1,
comments:{
likesCount: { $size: "$likes" },
liked: { $in: [ID(uid), "$likes"] },
......
}
}
}
... 注意:我想使用 $group 和 $unwind 来找到一个更清洁的解决方案 我的假solution
【问题讨论】:
标签: javascript arrays reactjs mongodb mongoose