qwe*_*rty 3 mongodb mongodb-query
我正在为 MongoDb 查询苦苦挣扎。
我有一个查询,可以对某些字段进行分组和计数,例如:
field_name | count
___________________
field1 | 10
field2 | 20
field3 | 30
Run Code Online (Sandbox Code Playgroud)
而且我想在最后添加总计数,使其看起来像这样:
field_name | count
___________________
field1 | 10
field2 | 20
field3 | 30
total | 60
Run Code Online (Sandbox Code Playgroud)
我了解如何在 SQL(UNION 或 ROLLUP)中实现它,尽管我找不到在 Mongo 中实现它的方法。
这是我的查询,以防万一:
db.subscriptions.aggregate([
{$match: {isExpired: false}},
{$group: {_id: '$productId', count: {$sum: 1}}}
])
Run Code Online (Sandbox Code Playgroud)
您可以使用$facet实现此目的
$facet对传入的文档进行分类。我遵循的方法是,将所有文档放入一个数组(originalArr)中。您可以使用$exists:truefield_name 或 counts 或两者。这取决于你。获取另一个数组中的总计数 (totalArr)。然后$concat两个数组合二为一。
[
{
"$facet": {
"originalArr": [
{
$match: {
count: {
"$exists": true
}
}
},
{
"$project": {
_id: 0
}
}
],
"totalArr": [
{
"$group": {
"_id": null,
"field_name": {
"$first": "total"
},
"count": {
$sum: "$count"
}
}
},
{
"$project": {
_id: 0
}
}
]
}
},
{
$project: {
combined: {
"$concatArrays": [
"$originalArr",
"$totalArr"
]
}
}
},
{
"$unwind": "$combined"
},
{
"$replaceRoot": {
"newRoot": "$combined"
}
}
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48 次 |
| 最近记录: |