如何表达 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 作为 ifelsethen 的替代方法。这将有助于编写系列案例。 您可以在 link 中查看此演示工作代码:https://mongoplayground.net/p/nUM2DRkNbdY

        $switch: {
          branches: [
            {
              case: {
                $or: [
                  {
                    $lt: [
                      "$full",
                      null
                    ]
                  },
                  {
                    $eq: [
                      "$full",
                      null
                    ]
                  }
                ],
                
              },
              then: {
                "$concat": [
                  "$first",
                  "_",
                  "$last"
                ]
              }
            }
          ],
          default: "$full"
        }