【问题标题】:Using MongoDB Limit() and Skip() together一起使用 MongoDB Limit() 和 Skip()
【发布时间】:2012-06-19 08:00:43
【问题描述】:

这里是查询:

$collection->find(array("x"=>new MongoId("..."))->skip(5)->limit(10);

使用 explain 给出以下结果:

[n]=>10
[nscanned]=>15
[nscannedObjects]=>15

"x" 上有索引。那么,如果我跳过前 5 个文档,为什么扫描对象的数量是 15 而不是 10?

【问题讨论】:

  • @hakre 这就是为什么 nscanned 应该是 15。而不是 nscannedObjects。
  • @hakre:如果您不理解问题,请不要考虑发表评论。看看Asya的回答。这是我所期待的。这是一个错误问题。不要在这里教数学。我比你懂数学。
  • 在服务器上,对象已经加载完毕。对象被扫描。跳过操作与返回给客户端的内容不同,但服务器正在报告要扫描的对象。我认为这没有任何问题,并认为错误报告是虚假的。我会说通常 mongodb 开发人员都懒得清理打开的票。
  • @hakre thnx。那么尽管使用索引,但将跳过的文档加载到内存中不是效率低下吗?有什么解决方案吗?
  • @Ashish:是否效率低下?你衡量过这个吗?解决什么问题?您期望错误的数字的问题?

标签: php mongodb indexing


【解决方案1】:

跳过五个然后将结果限制为十个意味着需要考虑十五个项目,前五个将被跳过,接下来的十个将被返回。

所以 nscanned 应该是 15。

nscannedObjects 应该是 10,但是由于这个bug/limitation,它也显示为 15。

【讨论】:

  • 好的。谢谢。表示其余 5 个未加载到内存中。对吧??
猜你喜欢
  • 2013-04-09
  • 2015-07-29
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
  • 2019-10-11
  • 1970-01-01
相关资源
最近更新 更多