在MongoDB中更改$ sum结果类型

时间:2016-01-08 09:38:26

标签: mongodb robo3t

这是我的问题:

db.log.aggregate([{
    $match: {
        "meta.userId": {
            $exists: true,
            $ne: null
        },
        "timestamp": {
            $gte: ISODate("2016-01-01"),
            $lte: ISODate("2016-01-07")
        }
    }
}, {
    $group: {
        _id: "$meta.userId",
        count: {
            $sum: 1
        }
    }
}])

在聚合管道中使用{ $sum: 1 }时,shell会返回 double 。我希望直接返回整数,因为它只是一个文档计数。

{
"result" : [ 
    {
        "_id" : "foo",
        "count" : 46.0000000000000000
    }, 
    {
        "_id" : "foo1",
        "count" : 146.0000000000000000
    }
],
"ok" : 1.0000000000000000
}

我知道如何改变总和的类型吗?

我的MongoDB版本是3.0.7。我使用Robomongo 0.8.5。

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用1明确指定值NumberInt是一个整数,请参阅此JIRA票证。在MongoDB shell中运行类似查询时通常不需要这样做,因此这可能是Robomongo的一个功能。

db.log.aggregate([{
    $match: {
        "meta.userId": {
            $exists: true,
            $ne: null
        },
        "timestamp": {
            $gte: ISODate("2016-01-01"),
            $lte: ISODate("2016-01-07")
        }
    }
}, {
    $group: {
        _id: "$meta.userId",
        count: {
            $sum: NumberInt(1)
        }
    }
}])