我有一个数据集看起来像
{"BrandId":"a","SessionId":100,"Method": "POST"}
{"BrandId":"a","SessionId":200,"Method": "PUT"}
{"BrandId":"a","SessionId":200,"Method": "GET"}
{"BrandId":"b","SessionId":300,"Method": "GET"}
Run Code Online (Sandbox Code Playgroud)
我通过brandid写了聚合计数不同的会话ID:
db.collection.aggregate([
{$group: {
"_id": {
brand: "$BrandId",
session: "$SessionId"
},
count: {$sum: 1}
}},
{$group: {
_id: "$_id.brand",
countSession:{$sum:1}
}}
])
Run Code Online (Sandbox Code Playgroud)
该查询的预期结果是:
{ "_id" : "a", "countSession" : 2 }
{ "_id" : "b", "countSession" : 1 }
Run Code Online (Sandbox Code Playgroud)
另一个查询是按品牌计数方法在POST的位置:
db.collection.aggregate([
{$match: {Method:"POST"}},
{$group: {
_id: '$BrandId',
countPOST:{$sum:1}
}}
])
Run Code Online (Sandbox Code Playgroud)
预期结果:
{ "_id" : "a", "countPOST" : 1 }
{ "_id" : "b", "countSession" : 0 }
Run Code Online (Sandbox Code Playgroud)
现在,我想结合这两个查询并获得预期的结果,如下所示:
{"BrandId:"a","countSession":2,"countPOST":1}
{"BrandId:"b","countSession":1,"countPOST":0}
Run Code Online (Sandbox Code Playgroud)
我不怎么将两个聚合的这两个结果结合起来,谁能帮忙?
您可以$cond按以下方式使用运算符。
db.Collection.aggregate(
{
'$group': {
'_id': {'BrandId':'$BrandId','Session': '$SessionId'},
'countPOST':{
'$sum':{
'$cond': [{'$eq':['$Method','POST']},1,0]
}
}
}
},
{
'$group': {
'_id': '$_id.BrandId',
'countSession': {'$sum':1},
'countPOST': {'$sum': '$countPOST'}
}
}
)
Run Code Online (Sandbox Code Playgroud)
输出:
{
"result" : [
{
"_id" : "a",
"countSession" : 2,
"countPOST" : 1
},
{
"_id" : "b",
"countSession" : 1,
"countPOST" : 0
}
],
"ok" : 1
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3667 次 |
| 最近记录: |