数据格式:
{
“_id” : ObjectId(“6142f6f2214ef618f5e1f2df”),
“device_type” : “-1”,
“user_count” : 5
}
{
“_id” : ObjectId(“j79ghn769bnnb9p9bns”),
“device_type” : “1”,
“user_count” : 4
}
group查询语句:
db.getCollection(‘analysis’).aggregate(
[
{
$group:
{
_id : ‘$device_type’,
groupCount: { $sum: “$user_count” }
}
}
]
)
当前返回结果:
{
“_id” : “1”,
“groupCount” : 11
}
{
“_id” : “0”,
“groupCount” : 24
}
{
“_id” : “-1”,
“groupCount” : 6
}
期望:
能将groupCount的总和数量(41)在结果中返回回来, 感觉是一个很简单的问题,但是研究两天了都没找到解决办法,请大神指教!!!!
你想要的结果是只显示41条总数,还是在原结果里面追加一个。
1、如果只是显示41,不用分组,直接加起来即可。
db.getCollection(‘analysis’).aggregate(
[
{
$group:
{
_id : null
groupCount: { $sum: “$user_count” }
}
}
]
)
2、再每一个分组里面追加吗?
{_id:null,
grouptotal:41,
rwa:[
{
“_id” : “1”,
“groupCount” : 11,}
{
“_id” : “0”,
“groupCount” : 24,}
{
“_id” : “-1”,
“groupCount” : 6}
]
db.getCollection(‘analysis’).aggregate(
[
{
$group:
{
_id : ‘$device_type’,
groupCount: { $sum: “$user_count” }
}
},{$group:{_id:null,grouptotal:{$sum:”$groupCount”},raw:{$push:”$ROOT”}}}]
)
像MySQL group by 以后,再将和count总和输出的话,只能在外层再加一层查询。如果将总和输出,最直接的方法也是再加pipeline将数据相加得出结果。但这样就需要查两次了(一次查总和,另一次查各device_type)。我可能会直接在程序端遍历各个groupCount,将它们相加。
大佬,”再加pipeline将数据相加得出结果”这个具体是怎么个写法呢? 我现在 group后算count 和 算全部总和, 分两条语句我会写. 但就是用两个 pipeline 在同一条语句里怎么写就不会了…
大佬,”再加pipeline将数据相加得出结果”这个具体是怎么个写法呢? 我现在 group算总和 跟 算全部总和, 分两条语句我会写. 但就是用两个 pipeline 在同一条语句里怎么写就不会了…
谢谢!感觉能行,但是我看不太懂!还是在程序里面算的~