gpt4 book ai didi

mongodb - 如何在 Mongodb 聚合管道中包含其他字段?

转载 作者:可可西里 更新时间:2023-11-01 09:43:12 26 4
gpt4 key购买 nike

我有一个转推集合,我想显示谁转推最多。

这是示例数据。

{
"_id" : ObjectId("55cf3400dd232e1b561b6b2c"),
....
"user" : {
"id" : 1.77202e+08,
...
"screen_name" : "Karunaprof",

},
...
},
{ ... }

所以每个文档都是一个转推。我可以汇总哪些用户转推最多,但它只返回 _id 我希望结果也返回 screen_name

这是我的查询。

db.getCollection('raw_tweets').aggregate(
{ $group : { _id: "$user.id_str", count : { $sum : 1 } } },
{ $match : { count : { $gte : 1 } } },
{ $sort : { count : -1 } },
)

这是我的结果

{
"_id" : "121817564",
"count" : 1419.0000000000000000
}

我的预期结果是

{
"_id" : "121817564",
"count" : 1419.0000000000000000,
"screen_name" : "screen_name"
}

最佳答案

$group阶段,您可以添加另一个字段 screenname并使用 $first 进行设置或 $last从该组中的第一个或最后一个文档中获取它:

db.getCollection('raw_tweets').aggregate(
{ $group : { _id: "$user.id", screenname: { $last :"$user.screen_name"}, count : { $sum : 1 } } },
{ $match : { count : { $gte : 1 } } },
{ $sort : { count : -1 } }
)

如果没有指定排序,则文档的顺序未定义,因此将被选为第一个/最后一个的文档也未定义。如果用户的屏幕名称永远不会更改,或者如果您不关心选择哪个屏幕名称,则上述方法应该足够了。

如果屏幕名称可以更改并且您确实关心选择哪个屏幕名称,则需要添加更多逻辑。例如,如果您决定使用最近的屏幕名称,您可以按日期升序排序,然后选择最后一个屏幕名称:

db.getCollection('raw_tweets').aggregate(
{ $sort : { date : 1 } },
{ $group : { _id: "$user.id", screenname: { $last :"$user.screen_name"}, count : { $sum : 1 } } },
{ $match : { count : { $gte : 1 } } },
{ $sort : { count : -1 } }
)

关于mongodb - 如何在 Mongodb 聚合管道中包含其他字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32528447/

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