如何对MongoDB查询的结果进行排序

257 阅读2分钟

关于MongoDB和我所有关于它的帖子的全面概述,请查看我的概述

在使用查找方法从MongoDB中获取一些文档,并使用过滤器进一步修剪结果后,可能仍然有很多数据。如果使用sort 方法进行排序,可能会更容易处理这些数据。

就像用户可以通过链接limit方法来修改查询结果一样,你可以使用sort 方法来链接另一个返回结果的方法的结果,比如findlimit ,以获得数据的特定顺序。

在一个名为users 的集合中,有以下数据集:

{
	"name": "John Doe",
	"email": "test@test.com",
	"admin": false,
	"dateJoined": ISODate("2021-02-01")
},
{
	"name": "Jane Doe",
	"email": "test2@test2.com",
	"admin": false,
	"dateJoined": ISODate("2021-03-01")
},
{
	"name": "Bob Doe",
	"email": "bob@bob.com",
	"admin": true,
	"dateJoined": ISODate("2021-01-01")
},
{
	"name": "Your Mom",
	"email": "koolkid@someplace.com",
	"admin": false,
	"dateJoined": ISODate("2020-12-01")
}

要把所有的文件按加入日期升序排列出来,我们要做以下工作:

db.users.find().sort({dateJoined: 1})

请注意,sort 需要一个参数,即描述如何对数据进行排序的对象。该对象中的每个字段都可以有1(升序)或-1(降序)的值。

这将使我们得到以下结果:

{
	"name": "Your Mom",
	"email": "koolkid@someplace.com",
	"admin": false,
	"dateJoined": ISODate("2020-12-01")
},
{
	"name": "Bob Doe",
	"email": "bob@bob.com",
	"admin": true,
	"dateJoined": ISODate("2021-01-01")
},
{
	"name": "John Doe",
	"email": "test@test.com",
	"admin": false,
	"dateJoined": ISODate("2021-02-01")
},
{
	"name": "Jane Doe",
	"email": "test2@test2.com",
	"admin": false,
	"dateJoined": ISODate("2021-03-01")
}

也可以对多个字段进行排序

db.users.find().sort({admin: 1, name -1})

这将首先返回按升序排序的文件admin ,然后按降序排序的文件 name

{
	"name": "Jane Doe",
	"email": "test2@test2.com",
	"admin": false,
	"dateJoined": ISODate("2021-03-01")
},
{
	"name": "John Doe",
	"email": "test@test.com",
	"admin": false,
	"dateJoined": ISODate("2021-02-01")
},
{
	"name": "Your Mom",
	"email": "koolkid@someplace.com",
	"admin": false,
	"dateJoined": ISODate("2020-12-01")
},
{
	"name": "Bob Doe",
	"email": "bob@bob.com",
	"admin": true,
	"dateJoined": ISODate("2021-01-01")
}