Изменить тип результата $sum в MongoDB

Вот мой запрос:

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 } в конвейере агрегации оболочка возвращает двойник. Я бы хотел, чтобы он возвращал непосредственно целое число, так как это просто количество документов.

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

Любая идея о том, как я могу изменить тип суммы?

Моя версия MongoDB — 3.0.7. Я использую Робомонго 0.8.5.

Благодарю вас!


person Jbalberge    schedule 08.01.2016    source источник


Ответы (1)


Вы можете явно указать, что значение 1 является целым числом, используя NumberInt, см. этот JIRA билет. Обычно это не требуется при выполнении аналогичных запросов в оболочке MongoDB, поэтому это может быть особенностью 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)
        }
    }
}])
person Alex    schedule 08.01.2016