我遇到了一个非常烦人的问题,而且我似乎无法为我的具体案例找到任何解决方案。在我的mongo聚合管道中,我想添加一个字段,并且根据另一个字段的子字段的存在,我想分配其他字段的子字段的值,如果其他字段的子字段不存在,则为1。
以下是我的尝试:
pipelineStages.push(
{$addFields:
{field:
{$cond: [
{$ne: ["$otherField.subField", null]},
"$otherField.subField", 1]
}
}
}
);
但是,它仅适用于该字段存在的情况。另一方面,该新字段根本没有添加到管道中。我有什么想法我做错了吗?
答案 0 :(得分:1)
您是否尝试过此版本的条件:
pipelineStages.push({ $addFields:
{field:
{$cond: [{$and: [{"$otherField": {"$exists": true}}, {"$otherField.subField": {"$exists": true}}]}, "$otherField.subField", 1]
}
}
});
答案 1 :(得分:1)
在$ifNull
中包装$cond
可以解决问题,即使存在子字段问题。
pipelineStages.push({
$addFields: {
newField: {
$cond: [
{
"$ifNull": [
"$otherField.subField",
false
]
},
"$otherField.subField",
1
]
}
}
);
答案 2 :(得分:0)
要检查该字段是否存在并且不为空,请使用:
pipelineStages.push({
$addFields: {
field: {
$cond: [
{"$gt": [$otherField, null]}, "$otherField.subField", 1
]
}
}
})
相反,要检查该字段是否不存在或为空,请使用:
{"$lte": [$otherField, null]}