monogdb 中的 $facet 聚合 [英] $facet aggregation in monogdb
问题描述
我的示例数据如下所示:
My Sample data looks like below:
Category response
Privacy 1
Mobile 1
Privacy 1
Privacy 0
Phishing 1
Mobile 1
Desktop 1
Desktop 0
Security 1
我创建了一个聚合查询到 group
所有 categories
并得到如下计数:
I have created an aggregate query to group
all categories
and get the count as below:
db.cmi5DashboardData.aggregate([
{$group:{_id:'$category',knt:{$sum:'$response'}}},
{$sort:{knt:-1}},
{$project:{_id:0,category:'$_id',count:'$knt'}}
])
我得到如下输出:
Category count
Privacy 2
Mobile 2
Phishing 1
Desktop 1
Security 1
但是,我需要将这些数据 group
到下一级以获得如下输出:
However, I need to group
this data to next level to get the output as below:
Category count
Privacy 2
Mobile 2
Others 3
在这里,前两个类别(数量较多,即隐私和移动)被假定为强,其余所有类别都被假定为弱点并称为其他类别.Others
应该是动态计算的,它是除了强数据点之外的所有其他数据点的相加.
关于此的任何建议或指示可能会有所帮助?
注意:我使用的是 mongodb 3.6
Here, first two categories(with higher count i.e. Privacy & Mobile) are assumed as strong and rest all categories are assumed as weak points and termed as others . Others
should be calculated dynamically which is an addition of all other data points except strong data points.
Any suggestions or pointers on this could be helpful?
Note: I'm using mongodb 3.6
更新:JSON 示例
{Category:'Phishing', response:1),
{Category:'Security', response:1),
{Category:'Privacy', response:1),
{Category:'Privacy', response:1),
{Category:'Privacy', response:0),
{Category:'Mobile', response:1),
{Category:'Mobile', response:1),
{Category:'Desktop', response:1),
{Category:'Desktop', response:0),
推荐答案
您应该尝试 $facet
聚合来获得所需的结果,它与 limit
一起使用非常简单,并且跳过
...
You should try $facet
aggregation to get the desired result which pretty simple to use with limit
and skip
...
您可以查看输出这里
You can check the output here
db.collection.aggregate([
{ "$facet": {
"top": [
{ "$group": {
"_id": "$Category",
"response": { "$sum": "$response" }
}},
{ "$sort": { "response": -1 }},
{ "$limit": 2 }
],
"rest": [
{ "$group": {
"_id": "$Category",
"response": { "$sum": "$response" }
}},
{ "$sort": { "response": -1 }},
{ "$skip": 2 },
{ "$group": {
"_id": "Others",
"response": { "$sum": "$response" }
}}
]
}},
{ "$project": { "data": { "$concatArrays": ["$top", "$rest"] }}},
{ "$unwind": "$data" },
{ "$replaceRoot": { "newRoot": "$data" }}
])
这篇关于monogdb 中的 $facet 聚合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!