gpt4 book ai didi

mongodb - 如何在MongoDB中实现分页?

转载 作者:IT老高 更新时间:2023-10-28 13:21:25 29 4
gpt4 key购买 nike

我需要对一组文章进行分页(按日期排序 - 仅此而已)。在 Mongodb 中执行此类操作的标准方法是什么?

由于性能问题,我不会使用 skip() 方法。我也不打算使用 $push 方法。我见过的最接近的方法是范围查询方法。但是,如果删除任何已排序的项目,它似乎会失败。

最佳答案

范围排序应该适合您。第一个请求将获取按日期排序的前 10 个项目:

db.articles.find({}).sort( { date : -1 } ).limit(10);

在此之后,您将需要在某处存储最后一项的日期并在下一个寻呼请求中使用 id:

db.articles.find({"date": {$lt: storedDateOfLastItem}}).sort( { date : -1 } ).limit(10);

所以,我想它应该适合你。要估计总页数,您需要使用 count .

But it seems to fail if any of the sorted items are removed.

如果您将从第 1 页删除例如文章,它肯定会中断第 2 页,因为存储的最后日期将被更改。为避免这种情况,您可以估计当前保存日期之前的项目数

db.articles.find({"date": {$gt: storedDateOfLastItem}}).sort( { date : -1 } ).count()

如果此计数已更改(假设删除了 2 篇文章)。您需要更新 storedDateOfLastItem

db.articles.find({"date": {$gt: storedDateOfLastItem}}).sort( { date : -1 } ).take(2)

再次从上述请求的最后一项中获取 storedDateOfLastItem 并继续进行分页。

但我的意见只是保持这个分页没有额外的逻辑,因为我认为删除文章是一种罕见的操作。

来自 mongodb 文档:

Paging Costs Unfortunately skip can be (very) costly and requires the server to walk from the beginning of the collection, or index, to get to the offset/skip position before it can start returning the page of data (limit). As the page number increases skip will become slower and more cpu intensive, and possibly IO bound, with larger collections.

Range based paging provides better use of indexes but does not allow you to easily jump to a specific page.

关于mongodb - 如何在MongoDB中实现分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8383488/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com