在MongoDB中对文档进行排序的3种方法
MongoDB提供了几种按特定顺序对文档进行排序的方法。其中每个都允许我们按升序或降序对文档进行排序。
还可以选择对搜索结果进行排序 - 按计算的元数据降序排序。$text``textScore
以下是在MongoDB中对文档进行排序的3种方法。
方法cursor.sort()
该方法指定查询返回匹配文档的顺序。[cursor.sort()](https://database.guide/mongodb-sort-2/ "MongoDB sort()")
假设我们有一个包含以下文档的集合:employees
{ “_id” : 1, “name” : “Bob”, “salary” : 55000 } { “_id” : 2, “name” : “Sarah”, “salary” : 128000 } { “_id” : 3, “name” : “Fritz”, “salary” : 25000 } { “_id” : 4, “name” : “Christopher”, “salary” : 45000 } { “_id” : 5, “name” : “Beck”, “salary” : 82000 } { “_id” : 6, “name” : “Homer”, “salary” : 1 } { “_id” : 7, “name” : “Bartholomew”, “salary” : 1582000 } { “_id” : 8, “name” : “Zoro”, “salary” : 300000 } { “_id” : 9, “name” : “Xena”, “salary” : 382000 }
下面是返回按字段升序排序的文档及其字段的示例:salary``_id
db.employees.find().sort( { salary: 1, _id: 1 } )
结果:
{ “_id” : 6, “name” : “Homer”, “salary” : 1 } { “_id” : 3, “name” : “Fritz”, “salary” : 25000 } { “_id” : 4, “name” : “Christopher”, “salary” : 45000 } { “_id” : 1, “name” : “Bob”, “salary” : 55000 } { “_id” : 5, “name” : “Beck”, “salary” : 82000 } { “_id” : 2, “name” : “Sarah”, “salary” : 128000 } { “_id” : 8, “name” : “Zoro”, “salary” : 300000 } { “_id” : 9, “name” : “Xena”, “salary” : 382000 } { “_id” : 7, “name” : “Bartholomew”, “salary” : 1582000 }
在这里,我们用于升序。如果我们想要降序排列,我们只需使用即可。1``-1
我在排序中包含该字段的原因是,如果两个或更多员工的薪水相同,则该字段可用于在他们之间对这些文档进行排序。_id``_id
虽然这看起来微不足道,但它会阻止MongoDB在我们每次运行查询时以不同的顺序返回这些文档。
您还可以对搜索结果进行排序。有关示例,请参阅 MongoDB sort()。$text
聚合管道阶段$sort
使用聚合管道框架时,可以使用阶段对所有输入文档进行排序,并按排序顺序将它们返回到管道。[$sort](https://database.guide/mongodb-sort/ "MongoDB $sort")
以下是我们如何返回与上一个示例相同的结果。除了,这次让我们按_降序_对它们进行排序:$sort
db.employees.aggregate(
[
{ $sort : { salary : -1, _id: 1 } }
]
)
结果:
{ “_id” : 7, “name” : “Bartholomew”, “salary” : 1582000 } { “_id” : 9, “name” : “Xena”, “salary” : 382000 } { “_id” : 8, “name” : “Zoro”, “salary” : 300000 } { “_id” : 2, “name” : “Sarah”, “salary” : 128000 } { “_id” : 5, “name” : “Beck”, “salary” : 82000 } { “_id” : 1, “name” : “Bob”, “salary” : 55000 } { “_id” : 4, “name” : “Christopher”, “salary” : 45000 } { “_id” : 3, “name” : “Fritz”, “salary” : 25000 } { “_id” : 6, “name” : “Homer”, “salary” : 1 }
您还可以对搜索结果进行排序。有关示例,请参阅 MongoDB $sort。$text
查询修饰符$orderBy
查询修饰符可以以两种形式之一使用。[$orderBy](https://database.guide/mongodb-orderby/ "MongoDB $orderBy")
示例如下:
db.employees.find( { $query: {}, $orderBy: { salary: 1 } } )
或者像这样:
db.employees.find()._addSpecial( "$orderby", { salary : 1 } )
自 v3.2 以来,shell 中已弃用查询修饰符,但我还是决定将其包含在此处。有关更多信息,请参阅 MongoDB 文档。$orderBy``mongo