我的数据集看起来像
{"BrandId":"a","SessionId":100,"Method": "POST"}
{"BrandId":"a","SessionId":200,"Method": "PUT"}
{"BrandId":"a","SessionId":200,"Method": "GET"}
{"BrandId":"b","SessionId":300,"Method": "GET"}
我想用brandid计算不同的SessionId组,并计算方法是由brandid进行POST组的方法。对于我提到的例子,预期的结果是:
{"BrandId:"a","countSession":2,"countPOST":1}
{"BrandId:"b","countSession":1,"countPOST":0}
我知道如果我想用brandid计算不同的seeionid,代码如下:
db.collection.aggregate([
{$group: {
"_id": {
brand: "$BrandId",
session: "$SessionId"
},
count: {$sum: 1}
}},
{$group: {
_id: "$_id.brand",
countSession:{$sum:1}
}}
])
如果我们只需要计算帖子的代码如下:
db.collection.aggregate([
{$match: {Method:"POST"}},
{$group: {
_id: '$BrandId',
countPOST:{$sum:1}
}}
])
但是我没有将这两个代码组合在一起,并且结果与我之前提到的预期结果相同?有人可以帮忙吗?
答案 0 :(得分:0)
在第一个$group
阶段,您需要计算POST
SessionId
和BrandId
的数量,然后在第二个$group
阶段计数{ {1}}和SessionId
总$sum
POST
BrandId
输出:
db.collections.aggregate(
[
{ '$match': {'Method': 'POST' }},
{ '$group': {
'_id': {
'brand': '$BrandId',
'session': '$SessionId'
},
'countPost': { '$sum': 1 }
}
},
{ '$group': {
'_id': '$_id.brand',
'countSession': { '$sum': 1 },
'countPost': { '$sum': '$countPost' }
}
},
{ '$project': {
'BrandId': '$_id',
'countPost': 1,
'countSession': 1,
'_id': 0
}
}
]
)