我喜欢使用的 mongo 运算符是 $ifNull
,但有时这并不能涵盖我需要涵盖的所有情况,例如空字符串。是否有一个运算符的工作方式类似于 $ifNull 运算符(但检查其他条件,例如空字符串),所有操作只需一步即可完成?如果该值是 null 或空字符串,我只需要默认该值。以下是我当前正在执行的查询的片段:
//ex docs:
{
"_id": "1",
"field": {
"value": "test"
}
},
{
"_id": "2",
"field": {
"value": ""
}
},
{
"_id": "3"
"field": {
"value": null
}
}
//step in query where I'm checking ifNull:
...
{
$project: {
resValue: {
$ifNull: ["$field.value", "No Data"]
},
}
}
...
我试图用谷歌搜索,但看到很多涉及 $function 的解决方案,或者只是将结果与空字符串匹配。这在我的情况下不起作用,因为我需要包含所有文档,但只需将 resValue 默认为“无数据”(如果它为空或为空)。我还试图限制复杂性并保持查询尽可能高效,因此我认为最好不要在项目之前包含 $function 步骤。
当前在我的数据库上运行版本 4.4.13。
如果字段本身存在且不是空字符串,我需要返回该值,但如果它是空字符串或 null,则返回“无数据”或其他默认字符串作为结果文档上的 resValue。
最佳答案
您已经走上了使用$ifNull
的正确道路。您只需要再一个 $cond
来检查空字符串大小写。
db.collection.aggregate([
{
"$addFields": {
"resValue": {
"$cond": {
"if": {
$eq: [
{
"$ifNull": [
"$field.value",
""
]
},
""
]
},
"then": "No Data",
"else": "$field.value"
}
}
}
}
])
这是Mongo playground供您引用。
关于mongodb - 是否可以在 Mongodb 中默认一个值,例如 $ifNull 但为空字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72003522/