尽管阅读了人们的回答,指出排序是首先完成的,但证据表明限制是在排序之前完成的,这是不同的。有没有办法总是先强制排序?
views = mongo.db.view_logging.find().sort([('count', 1)]).limit(10)
无论我使用 .sort().limit()
还是 .limit().sort()
,限制优先。我想知道这是否与 pymongo
…
原文由 disruptive 发布,翻译遵循 CC BY-SA 4.0 许可协议
尽管阅读了人们的回答,指出排序是首先完成的,但证据表明限制是在排序之前完成的,这是不同的。有没有办法总是先强制排序?
views = mongo.db.view_logging.find().sort([('count', 1)]).limit(10)
无论我使用 .sort().limit()
还是 .limit().sort()
,限制优先。我想知道这是否与 pymongo
…
原文由 disruptive 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
根据 文档, 无论您的命令链中哪个先行,
sort()
将始终在limit()
之前应用。您还可以研究查询的
.explain()
结果并查看执行阶段 - 您会发现排序输入阶段检查所有过滤的(在您的情况下是集合中的所有文档)然后限制被申请;被应用。让我们来看一个例子。
假设有一个
foo
数据库和一个test
包含 6 个文档的集合:现在,让我们以不同的顺序执行查询
sort()
和limit()
并检查结果和解释计划。排序然后限制:
限制然后排序:
如您所见,在这两种情况下,首先应用排序并影响所有 6 个文档,然后 limit 将结果限制为 3 个。
而且, 执行计划完全相同:
另见: