Mongodb通过id重新分页-这是一种反模式吗?
这类问题以前有人问过,我也问过,但我仍然无法集中精力 所以,Mongo按id按自然顺序存储文档(据我所知,这是写入磁盘的物理顺序吗?),并且每个文档(几乎)都有一个比上一个更大的id。伟大的因此,假设我们在一个集合中有11个文档,每个整数按自然排序顺序表示每个id,如Mongodb通过id重新分页-这是一种反模式吗?,mongodb,pagination,Mongodb,Pagination,这类问题以前有人问过,我也问过,但我仍然无法集中精力 所以,Mongo按id按自然顺序存储文档(据我所知,这是写入磁盘的物理顺序吗?),并且每个文档(几乎)都有一个比上一个更大的id。伟大的因此,假设我们在一个集合中有11个文档,每个整数按自然排序顺序表示每个id,如[1][2][3][4][5][6][7][8][9][10][11]。假设文档是数组 假设我们想在没有其他查询参数的情况下分页所有这些文档,每5页 因此,我们执行并获得: db.foo.find().limit(5)-[1][2]
[1][2][3][4][5][6][7][8][9][10][11]
。假设文档是数组
假设我们想在没有其他查询参数的情况下分页所有这些文档,每5页
因此,我们执行并获得:
db.foo.find().limit(5)
-[1][2][3][4][5]
db.foo.find({''u id':{'$gt':[5]}).限制(5)
-[6][7][8][9][10]
db.foo.find({''u id':{'$gt':[10]})。限制(5)
-[11]
到目前为止还不错
这次文档[4]
添加了大量内容,超出了预先分配的大小限制,因此现在我们的物理/自然(?)排序顺序是[1][2][3][5][6][7][8][9][10][11][4]
因此,我们执行并获得:
db.foo.find().limit(5)
-[1][2][3][5][6]
db.foo.find({''u id':{'$gt':[6]})。限制(5)
-[7][8][9][10][11]
db.foo.find({''u id':{'$gt':[11]})。限制(5)
-无
所以在本例中,我们跳过
[4]
?在这种情况下,如果删除一个文档并在其位置添加一个新文档(通常会变成[12]
),也会发生类似的情况。如果我的理解是正确的-没有明确指定顺序的分页是一种反模式吗?另一方面,如果您指定了排序,这是否意味着您仍然必须访问集合中的每个文档,然后对它们进行排序?如果您按索引排序,则它不必访问所有文档
在MongoDB中,排序操作可以通过检索
基于索引中的排序的文档。如果查询计划器
无法从索引中获取排序顺序,它将对结果进行排序
在记忆中。使用索引的排序操作通常具有更好的性能
性能优于那些不使用索引的。此外,排序
不使用索引的操作将在使用32时中止
兆字节的内存
欢迎!一个有效的答案需要的不仅仅是一个链接,而链接将变得不可用。请阅读