Mongo 如何写一个 CASE WHEN THEN ELSE

Mongo how to write a CASE WHEN THEN ELSE

我正在尝试将以下 mongo 翻译成 sql:

SELECT CASE WHEN COL_A IS NOT NULL THEN 'aaa' ELSE 'bbb' END AS FLAG, COL_B AS VALUE
FROM MY_TABLE

--- or, at least
SELECT coalesce(COL_A,'bbb') AS FLAG, COL_B AS VALUE
FROM MY_TABLE


/*sample json data*/
[
 { COL_A: "abc",
   COL_B: "123"
},{
 COL_B: "654"
},
{
COL_A: "zyx",
COL_B: "987"
}

]


/*expected_output*/
{
FLAG: "aaa", /*OR , at least, "abc"*/
VALUE: "123"
},{
FLAG: "bbb", 
VALUE: "654"
},{
FLAG: "aaa", /*or, at least, "zyx"*/
VALUE: "987"
}


在 mongo 我在这里:

db.getCollection('MyTable').aggregate([    
{
  $project: 
     { 
       "_id": 0, 
       "FLAG" : { 
           $switch :{ 
                      branches: [ 
                                  {case: { "$COL_A": { $exists: true } then: "aaa" } }
                                ],
                       default: "bbb"
                     }
                 }, 

        "VALUE" : "$COL_B"
      }
}, 
{
    $limit:50
}

])

但它告诉我意外的标识符

编辑:

使用 $ifNull 测试:我得到一个空数组作为输出而不是预期的 "bbb"

db.getCollection('MyTable').aggregate([    
{
  $project: 
     { 
       "_id": 0, 
       "FLAG" : {$ifNull: ["$COL_A", "bbb"] },
        "VALUE" : "$COL_B"
      }
}, 
{
    $limit:50
}

])
db.collection.aggregate([
  {
    $project: {
      "_id": 0,
      "FLAG": {
        $cond: [
          {
            $lte: [
              "$COL_A",
              null
            ]
          },
          "bbb",
          "aaa"
        ]
      },
      "VALUE": "$COL_B"
    }
  },
  {
    $limit: 50
  }
])

要检查值是否不存在或为空,请使用 { $lte: ["$field", null] }