如何表达 if-then-else MongoDB 聚合?
How to express if-then-else MongoDB aggregation?
假设我们有一个具有这种文档结构的集合
{
"full": <string>,
"first": <string>,
"last": <string>
}
在 $project
中寻找具有以下逻辑的表达式
if ("$full" is null or absent)
concatenate ("$first", "_" , "$last")
else
"$full"
我设法写了这个,但它在某些情况下不能正常工作并且看起来很大
$project: {
"fullName": {
$cond: {
if: { "$full": null },
then: { $concat: [ "$first", "_", "$last" ] },
else: "$full"
}
}
}
在MongoDB聚合中表达这种意图的简洁方式是什么?
您可以使用$ifNull
{
$project: {
full: {
$ifNull: ["$full", {$concat: ["$first", "_", "$last"]}]
}
}
}
如你所见here
我认为您可以使用 $switch
作为 if
、else
和 then
的替代方法。这将有助于编写系列案例。
您可以在 link 中查看此演示工作代码:https://mongoplayground.net/p/nUM2DRkNbdY
$switch: {
branches: [
{
case: {
$or: [
{
$lt: [
"$full",
null
]
},
{
$eq: [
"$full",
null
]
}
],
},
then: {
"$concat": [
"$first",
"_",
"$last"
]
}
}
],
default: "$full"
}
假设我们有一个具有这种文档结构的集合
{
"full": <string>,
"first": <string>,
"last": <string>
}
在 $project
中寻找具有以下逻辑的表达式
if ("$full" is null or absent)
concatenate ("$first", "_" , "$last")
else
"$full"
我设法写了这个,但它在某些情况下不能正常工作并且看起来很大
$project: {
"fullName": {
$cond: {
if: { "$full": null },
then: { $concat: [ "$first", "_", "$last" ] },
else: "$full"
}
}
}
在MongoDB聚合中表达这种意图的简洁方式是什么?
您可以使用$ifNull
{
$project: {
full: {
$ifNull: ["$full", {$concat: ["$first", "_", "$last"]}]
}
}
}
如你所见here
我认为您可以使用 $switch
作为 if
、else
和 then
的替代方法。这将有助于编写系列案例。
您可以在 link 中查看此演示工作代码:https://mongoplayground.net/p/nUM2DRkNbdY
$switch: {
branches: [
{
case: {
$or: [
{
$lt: [
"$full",
null
]
},
{
$eq: [
"$full",
null
]
}
],
},
then: {
"$concat": [
"$first",
"_",
"$last"
]
}
}
],
default: "$full"
}