MongoDB:复制集+分片:排序错误

时间:2013-07-22 10:58:37

标签: mongodb sorting

我的环境:版本:2.4.4,操作系统:Linux 64位,组件:复制集+分片

当我使用mongos连接到我的数据库时,会出现一个错误:

mongos> db.test.find().limit(500).sort({TIME:-1})

error: {
    "$err" : "BSONObj size: 268823536 (0xF0EB0510) is invalid. Size must be between 0 and 16793600(16MB) First element: \u001f: ?type=38",
    "code" : 10334
}

但是,当我按其他字段排序时,没有错误:

mongos> db.test.find().limit(500).sort({C_ID:-1})

{ "_id" : "13744759060340298528dbaaa", "C_ID" : "999", "TIME" : ISODate("2013-07-22T06:51:46.034Z"), "SE" : "0", "AREA" : "a21", "CT1" : "1", "CT2" : "1", "S_PT" : 11, "EN_N" : "Test system", "T_ID" : "3946", "EN_T" : "2", "MSG" : "for test64", "EVENT" : "test event39", "S_IP" : "1.2.4.174", "URL" : "URL536" }
......

所以我连接到其中一个分片:

sh0:PRIMARY> db.test.find().limit(500).sort({TIME:-1})

{ "_id" : "13744759061349b294b309aaa", "C_ID" : "373", "TIME" : ISODate("2013-07-22T06:51:46.134Z"), "SE" : "0", "AREA" : "a2", "CT1" : "1", "CT2" : "8", "S_PT" : 8, "EN_N" : "Test system", "T_ID" : "2654", "EN_T" : "1", "MSG" : "for test0", "EVENT" : "test event38", "S_IP" : "1.2.4.193", "URL" : "URL829" }
...

有人给我一个想法吗?

感谢您的关注!

2 个答案:

答案 0 :(得分:0)

TIME字段是否已编入索引?

索引

db.test.ensureIndex({TIME : -1})

答案 1 :(得分:0)

将分片键传递给您的所有查询。这不是推荐,这是你必须遵循的规则。此外,索引查询中所需的所有参数。对于需要多个参数的查询,请创建复合索引。注意:由于您的分片键将成为所有查询的一部分,因此单个索引几乎没有用处,您必须仅创建复合键。例如,要基于TIME进行查询,如果在查询中按顺序传递参数,则需要按顺序创建复合索引 - {C_ID,TIME}。