复数$ sum查询

时间:2017-01-25 11:44:52

标签: mongodb mongodb-query aggregation-framework

我正在使用Kettle,需要计算有多少条目具有一些预期值(内部数组中至少有两个字段)。

例如:

{
    "_id":"HY1406",
    "accounts": [ 
        {
            "should_exist" : 1,
            "endpoint" : "0_AD",
            "exists" : 0,
            "short_login" : "TB6"
        },
        {
            "should_exist" : 1,
            "endpoint" : "0_AD",
            "exists" : 0,
            "short_login" : "TB7"
        },
        {
            "should_exist" : 1,
            "endpoint" : "0_AD",
            "exists" : 0,
            "short_login" : "TB8"
        }
    ]
}

我必须计算有多少文件至少拥有"sould_exist" = 1 AND "exists" = 0的帐户。

如何使用MongoDB查询执行此操作?

1 个答案:

答案 0 :(得分:0)

您需要使用$elemMatch来匹配数组中嵌入文档的两个条件。获取find()的光标并调用count()

db.collection.find({
    accounts : {
        $elemMatch : {should_exist : 1, exists : 0}
    }
}).count()

或在count()

中写下您的过滤器
db.collection.count({
    accounts : {
        $elemMatch : {should_exist : 1, exists : 0}
    }
})

或聚合

db.collection.aggregate([
{
    $match : {
        accounts : {
            $elemMatch : {should_exist : 1, exists : 0}
        }
    }
},
{
    $group : {
        _id : "foo",
        count : {$sum : 1}
    }
}
])