gpt4 book ai didi

mongodb - 如何使用 Mongodb 进行聚合分组并显示其他字段?

转载 作者:可可西里 更新时间:2023-11-01 09:52:22 28 4
gpt4 key购买 nike

我需要运行 group 两次才能找到评论中平均点赞数最高的帖子。以下是我查询的初始阶段。

db.posts.aggregate([
{"$unwind": "$comments"},
{"$match":
{
"$comments.type": {
"$ne" : "spam"
},
}
}
])

这是我在运行上面的查询后看到的。

    {
"_id" : ObjectId("50b59cd75bed76f46522c465"),
"comment_id" : 49,
"post_id" : 29,
"likes" : {
"type" : "accepted",
"like" : 3
}
},
{
"_id" : ObjectId("50b59cd75bed76f46522c465"),
"comment_id" : 49,
"post_id" : 29,
"likes" : {
"type" : "rejected",
"like" : 7
}
}

我现在想做的是首先从这些有效记录中找出特定评论的平均点赞数,然后在每个帖子中,对每个评论的所有这些平均点赞数求和,然后除以每个帖子的评论总数。

请注意,comment_id 仅在同一 post_id 中是唯一的。意思是说,有post_id 28,comment_id 49的记录。

我试过这个查询。

db.posts.aggregate([
{"$unwind": "$comments"},
{"$match":
{
"$comments.type": {
"$ne" : "spam"
},
}
},
{"$group" :
{
"_id": "$_id",
"comment_avg":
{
"$avg":"$comments.like"
}
}
}])

我得到以下信息:

{
"_id" : ObjectId("50b59cd75bed76f46522c44d"),
"comment_avg" : 61.074253191058865
},
{
"_id" : ObjectId("50b59cd75bed76f46522c34e"),
"comment_avg" : 46.82622896256565
}

如您所见,我丢失了 post_id 信息。我试过 $project,但我想我一定做错了。

最佳答案

您尚未发布初始文档结构。

Document Structure:

{
"_id" : ObjectId("50b59cd75bed76f46522c471"),
"comment_id" : 61,
"post_id" : 29,
"comments" : [
{
"type" : "accepted",
"like" : 3
},
{
"type" : "rejected",
"like" : 3
},
{
"type" : "spam",
"like" : 3
}
]
}

假设您的文档结构如上,我编写了这个查询。您必须根据需要操纵它。

db.posts.aggregate([
{$unwind:"$comments"},
{$match:{"$comments.type":{$ne:"spam"}}},
{$group:{_id:{post_id:"$post_id",comment_id:"$comment_id"},LikeSum:{$sum:"$comments.like"}}},
{$group:{_id:{post_id:"$_id.post_id"},AvgComments:{$avg:"$LikeSum"}}},
{$sort:{AvgComments:-1}},
{$limit:1}
])

上面的查询构造如下:

1.) Unwind the comments array and form individual documents for each element in the comments array
2.) Select only the non-spam comments
3.) Calculate the sum of likes for each comment of all posts
4.) Calculate the average Comment likes for each post
5.) Sort documents in descending order of Average Comment Likes
6.) Select only the first document.

输出文档会是这样的

{
"result" : [
{
"_id" : {
"post_id" : xx
},
"AvgComments" : xx.xx // Avg Comment likes for post xx
}
],
"ok" : 1
}

关于mongodb - 如何使用 Mongodb 进行聚合分组并显示其他字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20915148/

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