游标 .sort() 和聚合$sort之间的区别



我是mongodb的新手,无法理解查找查询中的.sort()和聚合框架中的$sort之间的区别。

db.collection.find({}).limit(1).sort({ createdAt: 1 })

db.collection.aggregation([
{ $sort: { createdAt: 1 }},
{ $limit: 1 }
])

对于findsortlimit游标方法的顺序无关紧要。排序将始终发生在限制之前(请参阅文档中的"组合游标方法"(。

对于aggregate$sort$limit阶段的顺序是有意义的,并决定哪个操作首先发生。

聚合框架往往非常复杂。我建议任何尝试掌握它的人首先在他们的脑海中描绘输出(或者如果效果更好,则生成 SQL 查询(。

也就是说,区别只是性能:为了解释,假设它们是 10 而不是 1。 如果您阅读第一个查询,

db.collection.find({}).limit(10).sort({ createdAt: 1 })

将过滤 10 个项目并对其进行排序。第二个是对集合中的所有*项目进行排序,然后将它们过滤为 10:

db.collection.aggregation([
{ $sort: { createdAt: 1 }},
{ $limit: 10 }
])

您可以从 mongouniversity.com 查看本课程 希望它能帮助您了解:)

最新更新