做业务时,需要对获取的列表按时间由新到旧排序,但是超过了一定数量就报错了,错误如下:
"exception":"org.springframework.data.mongodb.UncategorizedMongoDbException",
"message":"Query failed with error code 96 and error message 'Executor error during find command: OperationFailed: Sort operation used more than the maximum 33554432 bytes of RAM. Add an index, or specify a smaller limit.' on server 127.0.0.1:27017;
nested exception is com.mongodb.MongoQueryException:
Query failed with error code 96 and error message 'Executor error during find command: OperationFailed: Sort operation used more than the maximum 33554432 bytes of RAM.
Add an index, or specify a smaller limit.' on server 127.0.0.1:27017"
找了有点时间发现是mongondb排序内存是有限的,超过了就会溢出报错,个人而言找到两个解决办法:
一、扩大默认内存
db.adminCommand({setParameter:1, internalQueryExecMaxBlockingSortBytes:335544320})
但个人而言不推荐这种方法,因为你不知道内存什么时候会因数据增长而再次耗尽,你开太大了浪费,开小了又会很快出现这个问题,非常麻烦。
二、创建索引
1、查看索引
db.organization.getIndexes()
2、对根据排序的字段添加索引
db.organization.createIndex( {"lastPatrolTime" : -1 } )
这样的话可能更好一些,不需要考虑内存有多大的问题,但如果业务比较复杂,相对会创建多一些索引,如果没有必要,最好不要给每个排序都创建索引