【发布时间】:2016-06-15 17:41:01
【问题描述】:
我目前正在使用 mongodb 作为大型 Rails 应用程序的数据库。dB 查询跳过和偏移有什么区别
【问题讨论】:
标签: mongodb mongoid mongodb-query
我目前正在使用 mongodb 作为大型 Rails 应用程序的数据库。dB 查询跳过和偏移有什么区别
【问题讨论】:
标签: mongodb mongoid mongodb-query
当您想要使用分页结果时,Mongodb 提供了两种批处理方法。首先是 skip,您通常将其称为 cursor.skip(n),其中 n 告诉它跳过 n 个文档。
例如db.collection.find().skip(4) // 跳过 4 个文档
另一种方法是使用 limit 将输出严格限制为您提供的数字。
例如db.collection.find().limit(10) // 将输出限制为 10 个文档
如果您想有效地使用批处理操作,请连续使用两者:
db.collection.find().skip(10).limit(10)
通过这种方式,您可以通过跳过包含 10 个文档的页面来实现分页,同时将输出限制为 10 个文档。
【讨论】:
根据 pymongo 在 freenode 上的 irc 频道 #mongoengine 没有区别。事实上我在 mongoid 文档中找不到这种叫做偏移量的东西。也应该尽可能避免跳过。当你“跳过”结果时,它仍然需要计算它们以跳过它们。这是浪费的,并且页数越高,log n 的性能就会越高(因为需要遍历所有匹配记录的完整索引)。使用 $gt 查询来匹配“已经看到的所有内容”允许 MongoDB 正确使用索引。
【讨论】: