【发布时间】:2021-11-16 19:04:46
【问题描述】:
鉴于这个幻想数据集(抱歉,我无法正确格式化它):
我需要创建一个 MongoDb 管道,在其中创建一个新字段,并且当“k”参数丢失或为空时,这个新字段应该能够添加一个值为空字符串的参数。
这是我的尝试:
...
{
"$addFields": {
"colors_field": {
"r": "$colors.r",
"g": "$colors.g",
"b": "$colors.b",
"k": {
"$cond": {
"if": {
"$or": [
{"$eq": [ "$colors.k", "" ]},
{"$eq": [ "$colors.k", null ]},
{"$colors.k": { "$exists": false}}
]
},
"then": "",
"else": "$colors.k"
}
}
}
}
}
我尝试使用 $exists 但我无法使其工作,因为我调用值来检查的方式:要么我输入“$colors.k”,它返回一个“MongoError: Unrecognized expression”或者我不这样做,它会返回一个“MongoError: FieldPath 字段名称可能不包含'.'”。 我也尝试检查该字段的长度,但如果该字段丢失,它会崩溃。
【问题讨论】:
-
尝试用
$ifnull替换$cond就像{"k" : { $ifNull: [ "$colors.k", "" ] }}这意味着如果color.k不存在或具有空值,取值“”,这就是你我想。 -
看起来工作正常!我仍然无法理解它应该如何工作,如果我不说明拥有“k”的实体,它怎么知道在哪里寻找它?无论如何,如果您将其发布为答案,我会将其标记为解决方案!