【问题标题】:how to fix Sort, limit and skip do not work on large amounts of data如何修复排序,限制和跳过不适用于大量数据
【发布时间】:2019-09-20 14:45:59
【问题描述】:

我正在为 mat-table 使用分页,为此我编写了如下的 mongoldb 查询,但此查询不适用于大数据,它给出的错误为:查找命令期间的执行器错误::由 :: 排序操作引起使用超过最大 33554432 字节的 RAM。添加索引,或指定更小的限制。

const sort = { orderId: -1 };
collection.find({ status: { $ne: "cancel" } }).sort(sort).limit(pageSize).skip(skips).toArray(function (err, response) {});

我期待按照orderid 的防守顺序输出。

【问题讨论】:

    标签: angular mongodb command-line-interface


    【解决方案1】:

    通常,您需要在要排序的字段上添加索引。发生错误是因为 orderId 上没有 MongoDB 可以使用的索引,这意味着在内存中对结果进行排序。这适用于少量数据,但在这种情况下它不起作用,因为在操作期间可以使用多少内存有内存上限(32MB)。尝试添加以下索引:

    db.my_collection.createIndex({ status: 1, orderId: -1 }, { background: true })
    

    这应该可以帮助您根据status 进行搜索和排序。请注意,即使排序基于非前缀子集,也会有效地使用索引。这是因为查询的第一部分包括对第一个键的相等比较。更多信息请访问Use Indexes to Sort Query Results

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 2017-12-18
      • 2015-08-20
      • 1970-01-01
      相关资源
      最近更新 更多