我有一个文档集合,其中一个字段名称不同,但它意味着相同的事情。 所以我希望能够做类似于SQL CASE语句的事情:
SELECT CASE
WHEN field1 IS NULL THEN field2
ELSE field1
最重要的是,我需要做一个聚合:
db.coll.aggregate(
[
{
$group:
{
_id: "fieldID",
maxThing: { $max: { $divide: [ "fieldA", "fieldB" ] } }
ELSE IF fieldA IS NULL
maxThing: { $max: { $divide: [ "fieldC", "fieldD" ] } }
}
}
]
)
想法?
谢谢!
答案 0 :(得分:2)
最好在汇总管道中使用 $ifNull
运算符:
对于第一种情况,您可以在 $project
管道阶段使用它:
.htaccess
至于其他情况:
db.coll.aggregate([
{
$project: {
"item": 1,
"field1": { "$ifNull": [ "$field1", "$field2" ] }
}
}
])
答案 1 :(得分:0)
我把它拿回来。 工作,在下面这个简单的测试用例中使用它。但在我的生产案例中,它失败了。某处必须出错。我需要弄明白。
JSON:
{
"id" : "Identifier A",
"fieldA" : 1,
"fieldB" : 2
},
{
"id" : "Identifier B",
"fieldC" : 3,
"fieldD" : 4
}
QUERY:
db.test.aggregate(
[{
$group: {
_id: "$id",
maxOfDiv: {
$max: {
$divide: [{
"$ifNull": ["$fieldA", "$fieldC"]
}, {
"$ifNull": ["$fieldB", "$fieldD"]
}]
}
}
}
}]
)