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] }
我正在尝试将以下 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] }