背景
在使用node.js+mongodb开发的后端项目,在查询时,使用了排序,出现如下报错
Mongodb: Sort operation used more than the maximum 33554432 bytes of RAM
Mongodb的sort操作是把数据拿到内存中再进行排序的,默认给sort操作分配的内存为32MB,当查询数据量比较大时,超过32MB,则报错
解决方案有个思路
1、分配多点排序内存(增加10倍)
db.adminCommand({setParameter:1, internalQueryExecMaxBlockingSortBytes:335544320})
// 若内存足够,可以考虑,但是,这将比较消耗资源
2、按错误提示,创建索引
db.myCollection.createIndex({fieldName: 1}) // 1为升序,-1为降序
db.myCollection.getIndexes() //查看当前collection的索引
// 创建索引将导致以下两点问题
// 1. 写数据变慢
// 2. 索引本身站用存储