gpt4 book ai didi

mongodb - 使用 Mongo 按组计算多个不同的字段

转载 作者:IT老高 更新时间:2023-10-28 12:30:45 24 4
gpt4 key购买 nike

我有一个数据集看起来像

{"BrandId":"a","SessionId":100,"UserName":"tom"}
{"BrandId":"a","SessionId":200,"UserName":"tom"}
{"BrandId":"b","SessionId":300,"UserName":"mike"}

我想按brandid统计不同的 session 和用户名组,示例sql如下:

select brandid,count_distinct(sessionid),count_distinct(username)
from data
group by brandid

我尝试编写 Mongo DB,我当前的代码如下,但它不起作用。有没有办法让它工作?

db.logs.aggregate([ 
{$group:{
_id:{brand:"$BrandId",user:"$UserName",session:"$SessionId"},
count:{$sum:1}}},
{$group:{
_id:"$_id.brand",
users:{$sum:"$_id.user"},
sessions:{$sum:"$_id.session"}
}}
])

对于某个示例,预期计数为

{"BrandId:"a","countSession":2,"countUser":1}
{"BrandId:"b","countSession":1,"countUser":1}

如果你知道 SQL,预期结果和我提到的 SQL 一样。

最佳答案

您可以使用 $addToSet 来做到这一点在 $group 期间累积不同的 SessionIdUserName 值集,然后添加 $project暂存到使用 $size 的管道运算符获取每个集合的大小:

db.logs.aggregate([
{$group: {
_id: '$BrandId',
sessionIds: {$addToSet: '$SessionId'},
userNames: {$addToSet: '$UserName'}
}},
{$project: {
_id: 0,
BrandId: '$_id',
countSession: {$size: '$sessionIds'},
countUser: {$size: '$userNames'}
}}
])

结果:

{
"BrandId" : "b",
"countSession" : 1,
"countUser" : 1
},
{
"BrandId" : "a",
"countSession" : 2,
"countUser" : 1
}

关于mongodb - 使用 Mongo 按组计算多个不同的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30086067/

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