MongoDB无法比较Integer64的

时间:2013-01-31 13:41:10

标签: mongodb

我收集了一些日常统计信息,我想在mongo中使用聚合框架。现在我遇到了将Integer64(类型18)排序/分组的问题,我想要求一些帮助:

mongos> db.daily_apps_totals.findOne({"_id.appId":{$type:16}})
{
    "_id" : {
            "datetime" : ISODate("2012-08-15T00:00:00Z"),
            "appId" : 243,
            },
    ...
}

mongos> db.daily_apps_totals.aggregate([ {$match: {"_id.datetime":ISODate("2013-01-28T00:00:00Z"), "_id.appId":{$type:16}}},  {$project:{_id:"$_id.appId"}}, {$sort: {_id:1}},{$limit:3}])
{
    "result" : [
            {
                    "_id" : 243
            },
            {
                    "_id" : 243
            },
            {
                    "_id" : 245
            }
    ],
    "ok" : 1
}

排序适用于Integer32(类型16),但不适用于Integer64:

mongos> db.daily_apps_totals.findOne({"_id.appId":{$type:18}})
{
    "_id" : {
            "datetime" : ISODate("2012-08-15T00:00:00Z"),
            "appId" : NumberLong(245),
    },
    ...
}

mongos> db.daily_apps_totals.aggregate([ {$match: {"_id.datetime":ISODate("2013-01-28T00:00:00Z"), "_id.appId":{$type:18}}},  {$project:{_id:"$_id.appId"}}, {$sort: {_id:1}},{$limit:3}])
{
    "errmsg" : "exception: can't compare values of BSON types Array and NumberLong64",
    "code" : 16016,
    "ok" : 0
}

P.S。 MongoDB shell版本:2.2.1

1 个答案:

答案 0 :(得分:1)

这可能意味着您的集合中有一些文档_id.appId包含一个Integer64s数组而不是一个Integer64。

{"_id.appId": {$type:18}}的查询对象将与SERVER-1475匹配。