angular - 如何修复排序、限制和跳过不适用于大量数据的问题

标签 angular mongodb command-line-interface

我正在对 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/

相关文章:

javascript - 如何使用 Angular 2 添加背景图片伪元素 'after' 内容?

angular - 如何在光标点动态添加数据到CKeditor

javascript - AOT : Error: Uncaught (in promise): TypeError: Cannot read property '$' of undefined

node.js - 你如何一次保存到三个集合?

mongodb - $divide 累加器是一元运算符

unix - 如何通过CLI重命名7zip存档中的文件?

javascript - Typescript 对象返回数组对象值错误 [Angular]

javascript - 更新嵌套对象的多个字段

Python cmd 模块 - 从行中解析值

python - 在 sys.stdin.read() 和子进程调用 vim 之后如何不弄乱终端?