MongoDB查询SELECT一个字段,如果另一个为null

时间:2015-10-14 21:42:25

标签: mongodb

我有一个文档集合,其中一个字段名称不同,但它意味着相同的事情。 所以我希望能够做类似于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" ] } }
         }
     }
   ]
)

想法?

谢谢!

2 个答案:

答案 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"]
                    }]
                }
            }
        }
    }]
)