Javascript MongoDB深层嵌套聚合
tl;博士 我所拥有的: db.posts.find() 我想要达到的目标:Javascript MongoDB深层嵌套聚合,javascript,mongodb,mongoose,aggregation-framework,Javascript,Mongodb,Mongoose,Aggregation Framework,tl;博士 我所拥有的: db.posts.find() 我想要达到的目标: { 1: {posts: 2, likes: 77, comments: 4}, 2: {posts: 1, likes: 33, comments: 4}, 3: {posts: 1, likes: 44, comments: 3}, 8: {posts: 0, likes: 0, comments: 1}, } 如您所见,authorId和CommentorID字段包含链接到另一个集合的Object
{
1: {posts: 2, likes: 77, comments: 4},
2: {posts: 1, likes: 33, comments: 4},
3: {posts: 1, likes: 44, comments: 3},
8: {posts: 0, likes: 0, comments: 1},
}
如您所见,authorId和CommentorID字段包含链接到另一个集合的ObjectId键(比如“用户”)。任何用户都可以担任作者或评论员。即使用户并没有写任何帖子,他仍然需要被包括在聚合结果中。所有帖子中的评论数量都需要计算,而不仅仅是帖子,authorId等于评论员ID。我想这是你想要的
db.posts.aggregate([
{$unwind:"$comments"},
{$group:{_id:"$authorId",
"likes":{$addToSet:"$likes"}, "comments":{$addToSet:"$comments"}}},
{$project:{"likes":{$sum:"$likes"}, "posts":{$size:"$likes"}, "comments":{$size:"$comments"}}}
])
你的问题是什么???聚合问题这不是问题。到目前为止你做了什么?什么阻止了你?通过authorId字段执行{$group:{…}}我无法访问其他帖子的数据(其中包含该作者的评论编号)
db.posts.aggregate([
{$unwind:"$comments"},
{$group:{_id:"$authorId",
"likes":{$addToSet:"$likes"}, "comments":{$addToSet:"$comments"}}},
{$project:{"likes":{$sum:"$likes"}, "posts":{$size:"$likes"}, "comments":{$size:"$comments"}}}
])