在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