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

时间:2018-09-17 15:44:05

标签: node.js mongodb mongoose aggregation-framework

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

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

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

2 个答案:

答案 0 :(得分:1)

对于findsortlimit游标方法的顺序无关紧要。排序将始终在限制之前进行(请参阅文档中的"Combine Cursor Methods")。

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

答案 1 :(得分:0)

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

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

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

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

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

You can have a look at this course from mongouniversity.com 希望它能帮助您理解:)