繁体   English   中英

MongoDB API分页

[英]MongoDB API pagination

想象一下当客户端提供具有限制10的对象时的情况。
当需要接下来的10个时,它会发送跳过10并限制为10的请求。

但是,如果第一个请求偏移量== 0,则会有一些新对象被添加(或删除)到集合中。

然后在第二次请求(带偏移== 10)时,响应可能有错误的对象顺序。

对它们的创建时间进行排序在这里不起作用,因为我有一些通过某些数字字段排序时形成的提要。

这实际上取决于你想要的结果。

如果您希望原始对象按原始顺序而不管删除和添加操作,那么您需要复制列表(或至少是订单),然后翻阅它。 将每个Id复制到一个新的集合,该集合在页面加载后不会更改,然后通过它进行分页。

或者,也许更有可能的是,你想要的是看到当前集合中最后一个之后的10个,包括之后发生的任何删除或添加操作。 为此,您可以使用您正在查看它们的排序顺序和过滤器,$ gt,无论最后一项是什么。 但是,当您要排序的字段中存在重复项时,这不起作用。 为了解决这个问题,你需要在该字段上编制索引PLUS其他每个记录唯一的字段,例如_id字段。 现在,您可以获取第一组中的最后一条记录,并查找$ eq为索引值的记录,$ gt,_id OR只是$ gt索引值。

您可以添加一个时间字段,如created_at或updated_at。 在创建或修改文档时必须更新它,并且该字段必须是唯一的。

然后使用$ gte和$ lte 以及此时间字段的排序查询数据库中的时间范围。

这可确保在时间窗口外进行的任何更改都不会反映在分页中,前提是时间字段没有重复项。 最有可能的是,如果你包括microtime,重复不会发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM