Mongodb的分页问题
不懂就问:skip(A).limit(B),AB之间是否存在某种关系
db.*****.sort({:*}).skip(100).limit(100).**
本人的理解为:通过某种条件进行排序,之后100条为一页,取前100进行操作。
如果1:
.sort({:}).skip(100).limit(70).**
我认为:通过排序,100条为一页,取前70条
问题:如果再次执行此命令,相同的排序和分页,再取70条数据,是否是从71条开始取数据,是否会出现重复的情况
如果2:
.sort({:}).skip(100).limit(120).**
问题:同上再次执行此命令,第二次取数据是否是从第121条开始取
望指点迷津
基于Monster 组和GPT的调写:
在 MongoDB 中,使用 skip()
和 limit()
进行分页时,它们之间存在一定的关系。下面我会解答你的问题并提供一些指导:
对于命令 .sort({...}).skip(100).limit(100).**
:
你的理解是正确的。首先,数据按指定条件进行排序,然后从第 101 条记录开始跳过 100 条数据,接着只返回后续的 100 条数据作为结果。
如果再次执行相同的命令,不会出现重复的情况。因为每次执行命令时,MongoDB 会按照相同的排序条件重新进行排序,并且 skip()
和 limit()
的参数保持不变。因此,第二次执行命令将会跳过前 100 条数据,并返回接下来的 100 条数据,不会包含前面已经获取的数据。
对于命令 .sort({...}).skip(100).limit(70).**
:
在这种情况下,排序后跳过前 100 条数据,然后只返回接下来的 70 条数据。如果再次执行相同的命令,将会跳过前 100 条数据,然后返回接下来的 70 条数据,这次会从第 171 条数据开始。
对于命令 .sort({...}).skip(100).limit(120).**
:
在这种情况下,排序后跳过前 100 条数据,然后返回接下来的 120 条数据。如果再次执行相同的命令,将会跳过前 100 条数据,然后返回接下来的 120 条数据,这次会从第 221 条数据开始。
总结起来,.skip()
和 .limit()
的参数是相对的,而不是绝对的记录索引。每次执行命令时,都会重新排序,并根据新的排序顺序和参数返回相应的结果。因此,不会出现重复的情况,而是从跳过的位置继续取数据。