我正在对 mat-table 使用分页,为此我编写了 mongoldb 查询,如下所示,但此查询不适用于大数据,它给出的错误为:查找命令::期间由::排序操作引起的执行器错误使用的 RAM 超过最大 33554432 字节。添加索引,或指定较小的限制。
const sort = { orderId: -1 };
collection.find({ status: { $ne: "cancel" } }).sort(sort).limit(pageSize).skip(skips).toArray(function (err, response) {});
我期待根据 orderid
以防守顺序输出。
最佳答案
一般来说,您需要在要排序的字段上添加索引。发生错误的原因是 orderId
上没有 MongoDB 可以使用的索引,这意味着要对内存中的结果进行排序。这适用于少量数据,但在本例中则不然,因为在操作期间可以使用多少内存有内存上限 (32MB)。尝试添加以下索引:
db.my_collection.createIndex({ status: 1, orderId: -1 }, { background: true })
这应该可以帮助您根据状态
和排序进行搜索。请注意,即使排序基于非前缀子集,索引也会得到有效使用。这是因为查询的第一部分包括对第一个键的相等比较。更多信息请参见Use Indexes to Sort Query Results .
关于angular - 如何修复排序、限制和跳过不适用于大量数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58030641/