最近在获取mongodb某个集合的数据过程中,在进行排序的过程中报错,具体报错信息如下:
Error: error: { "ok" : 0, "errmsg" : "Executor error during find command: OperationFailed: Sort op eration used more than the maximum 33554432 bytes of RAM. Add an index, or speci fy a smaller limit.", "code" : 96, "codeName" : "OperationFailed" }
知道这是排序的时候报的错,因为 mongo 的 sort 操作是在内存中操作的,必然会占据内存,同时mongo 内的一个机制限制排序时最大内存为 32M,当排序的数据量超过 32M,就会报上面的这个错,
解决办法就像上面提示的意思,一是加大 mongo 的排序内存,这个一般是运维来管,也有弊端,就是数据量如果再大,还要往上加。另一个办法就是加索引。
创建索引
db.你的collection.createIndex({"你的字段": -1}),此处 -1 代表倒序,1 代表正序;
比如对trsdata集合的IR_URLTIME字段建立索引:db.trsdata.createIndex({"IR_URLTIME": -1})
查询索引: db.trsdata.getIndexes()
这样建立索引后就可以进行排序了。