【发布时间】:2020-09-25 03:34:47
【问题描述】:
我正在考虑将我的应用程序从 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?
【问题讨论】: