【问题标题】:Is there any way to optimize this MongoDB query for pagination in Node.js有什么方法可以优化这个 MongoDB 查询以在 Node.js 中进行分页
【发布时间】:2016-11-23 18:47:05
【问题描述】:

我正在对大量文档进行分页。我想知道这是否是使用 _id 在 mongoDB 中进行分页的有效方法。我担心的是,每次我进行查询时,都需要对整个 id 集合进行排序,然后才能返回结果。我看到了这个关于使用索引优化查询的文档,但是这是否适用于我,因为我在 _id 上查询,我认为它已经被索引了?

分页功能:

function paginateDocs(currId, docsPerPage) {
  const query = currId ? { _id: { $gt: currId } } : {};
  const queryOptions = { limit: usersPerPage, sort: '_id' };
  return mongo.find(query, queryOptions).toArray();
}

【问题讨论】:

  • 它应该选择默认索引{_id: 1},并在btree 的>currId 范围内查找文档。你能粘贴mongo.explain(1).find(query, options)的输出吗?
  • 我无法在生产环境中执行此操作,所以我认为这将不再有用,对吧?

标签: node.js mongodb optimization pagination


【解决方案1】:

您可以使用 cursor.hint(index) 将 index 定义为您想要排序的所有索引。参考这个链接-> https://docs.mongodb.com/manual/reference/method/cursor.hint/

【讨论】:

  • 我为什么要覆盖默认索引呢? _id 上不是默认索引的吗?
  • 是的,你可以做的是,因为你有这么多文件,排序操作本身对你来说非常繁重。您可以尝试将 _ids 保存在具有数据结构存储、用作数据库、缓存的 redis 中。这将使您的查询速度更快。
  • 这个链接会给你更多关于redis的信息-
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
相关资源
最近更新 更多