解决mongo sort operation max

最近使用mongodb进行统计查询,遇到了下面的错误提示

mongo 错误提示:OperationFailed: Sort operation used more than the maximum 33554432 bytes of RAM. Add an index, or specify a smaller limit

也许你遇到了跟我一样的问题,不知道如何解决

其原因是

Mongodb的sort操作是把数据拿到内存中再进行排序的,为了节约内存,默认给sort操作限制了最大内存为32Mb,当数据量越来越大直到超过32Mb的时候就自然抛出异常了.值得注意是,如果你使用 skip 和 limit 联合使用实际也会产生排序.

下面是两种方式,仅供参考

方法1:增加缓存

1
2
3
4
//查询值
db.runCommand({ "getParameter" : 1, "internalQueryExecMaxBlockingSortBytes" : 1 } )
//设置新值
db.adminCommand({"setParameter":1, "internalQueryExecMaxBlockingSortBytes":335544320})

方法2:增加索引

根据业务对排序的key进行建立索引

我采用的方式是第二种方法

参考文章,点击这里