mongodb - 在分组期间根据条件组合结果
问题描述
从 java 代码生成的 Mongo 查询:
{
"pipeline": [{
"$match": {
"Id": "09cd9a5a-85c5-4948-808b-20a52d92381a"
}
},
{
"$group": {
"_id": "$result",
"id": {
"$first": "$result"
},
"labelKey": {
"$first": {
"$ifNull": ["$result",
"$result"]
}
},
"value": {
"$sum": 1
}
}
}]
}
字段“结果”可以具有 Approved、Rejected、null 和“”(空字符串)等值。我想要实现的是将 null 和 empty 的计数结合在一起。
这样空字符串Id就会有null和""的计数,等于4
解决方案
我确信有一种更“正确”的方式,但这是我可以很快想到的:
[
{
"$group" : {
"_id" : "$result",
"id" : {
"$first" : "$result"
},
"labelKey" : {
"$first" : {
"$ifNull" : [
"$result",
"$result"
]
}
},
"value" : {
"$sum" : 1.0
}
}
},
{
"$group" : {
"_id" : {
"$cond" : [{
$or: [
{"$eq": ["$_id", "Approved"]},
{"$eq": ["$_id", "Rejected"]},
]}},
"$_id",
""
]
},
"temp" : {
"$push" : {
"_id" : "$_id",
"labelKey" : "$labelKey"
}
},
"count" : {
"$sum" : "$value"
}
}
},
{
"$unwind" : "$temp"
},
{
"$project" : {
"_id" : "$temp._id",
"labelKey": "$temp.labelKey",
"count" : "$count"
}
}
],
);
由于第二组仅在 4 个文档上,我对此并不感到太糟糕。
推荐阅读
- javascript - 如何在 React.js 中使用 JavaScript 修改 CSS
- python - PYTHON:如何抓取字符串的特定部分?
- bash - 如何防止 bash subshell 等待子进程
- reactjs - 重新加载页面 React 后显示 Facebook 评论插件
- python - 是否可以将流中的内容保存到变量而不是位置?
- swift - 传递为参数后如何保存模型?或作为函数获取?核心数据
- python - print() 结果不输出,找不到错误
- c# - DockPanel 的 IsEnabled 上的 WPF 绑定问题
- java - 为什么我在 Linkedlist 程序中获取 java.lang.IndexOutOfBoundsException 以打印 LinkedList 中连续的最大和最小数字
- javascript - 从本地文件夹导入 type=module 的脚本会导致 CORS 问题