【发布时间】:2023-04-04 12:52:01
【问题描述】:
嗯,这是一个技术性能问题:
我有这样的查询
db.collection.aggregate([
{$match:{...}},
{$group:{...}},
{$group:{...}},
{$project:{...}},
{$sort:...}
])
但如果我想设置限制,我在查询最后使用$limit
db.collection.aggregate([
{$match:{...}},
{$group:{...}},
{$group:{...}},
{$project:{...}},
{$sort:...},
{$limit : 10}
])
所以我的问题是什么是放置 $limit 的最佳方式:
- 咨询开始时。
- 咨询结束时。
- 在咨询的任何部分:顺序并不重要。
我的逻辑/头脑说You should to use "$limit" after $match to limit first results because maybe Mongo execute first $match and after will get result to process the next query's($group, $group, $project, $sort, ...)。
谢谢
P.S:我是使用 Mongo 的新手。对不起我的英语不好。
【问题讨论】:
-
这是一个“管道”,因此您申请
$limit的位置取决于您的需求。想想“Unix管道|”:sed | grep | awk | grep | sed等等。这取决于“您在哪里需要它”。 -
那和我想的一样:要看我想在哪里影响限制,优先考虑句子的顺序。如果我想要 10 个结果,最好在 $match 之后使用它,因为 $group 只会对咨询的原始结果进行分组/编辑。然后,如果需要,您可以在 $group 中重用 $limit。显然,这是一个重要的顺序问题。
-
你需要先真正了解“管道”原理。执行顺序成其他。不回头,不修改。进去的东西出来,通常会改变。这就是重点。
标签: mongodb mongodb-query aggregation-framework