mongodb - 在 MongoDB 聚合中用 $cond 替换 $ifNull
问题描述
我正在考虑将我的应用程序从 MongoDB 3.6 迁移到 AWS DocumentDB。我正在检查是否支持所有内容,并$ifNull
在代码中找到(聚合)。DocumentDB 不支持$ifNull
.
对于一组样本文档:
[
{ "hostname": "foo", "name": "a", "is_valid": true },
{ "hostname": "foo", "name": "b", "is_valid": false },
{ "hostname": "foo", "name": "c" }
]
我想按主机名字段对文档进行分组,如果 is_valid 字段不存在,请使其为真。这是当前的聚合查询:
{
$group: {
_id: "$hostname",
boxes: {
$push: {
name: "$name",
is_valid: { $ifNull: ["$is_valid", true]}
}
}
}
}
它返回:
{
"_id": "foo",
"boxes": [
{ "name": "a", "is_valid": true },
{ "name": "b", "is_valid": false },
{ "name": "c", "is_valid": true }
]
}
这是我尝试过的:
{
$group: {
_id: "$hostname",
boxes: {
$push: {
name: "$name",
is_valid: { $cond: [{$ne: ["$is_valid", null]}, "$is_valid", true]}
}
}
}
}
但这会返回:
{
"_id": "foo",
"boxes": [
{ "name": "a", "is_valid": true },
{ "name": "b", "is_valid": false },
{ "name": "c" }
]
}
我怎样才能翻译$ifNull
成等价物$cond
?
解决方案
2021 年 1 月,Amazon DocumentDB 添加了对 $ifNull 的支持。
推荐阅读
- c# - WinDbg sosex 无法调试
- vhdl - 即使在 VHDL 进程中执行信号分配,信号也会变得未定义
- typescript - 保留函数和函数参数类型
- php - Woocommerce:如何在注销时显示自定义成功通知消息?
- c# - 为什么每次右键都会弹出context menustrip,如何通过控制右键事件在指定位置启用呢?
- java - Log4j2 SmtpAppender 包含没有堆栈跟踪源代码位置的异常
- ios - 如何修复此错误“找不到架构‘x86_64’的模块‘CzsBleSdk’;找到:arm64,arm”
- firebase - 无法从 Firebase 函数访问数据库
- sql - 计算排名并按照顺序应用
- node.js - NodeJS在函数中调用readline