关于MongoDB和我所有关于它的帖子的全面概述,请查看我的概述。
在使用查找方法从MongoDB中获取一些文档,并使用过滤器进一步修剪结果后,可能仍然有很多数据。如果使用sort 方法进行排序,可能会更容易处理这些数据。
就像用户可以通过链接limit方法来修改查询结果一样,你可以使用sort 方法来链接另一个返回结果的方法的结果,比如find 或limit ,以获得数据的特定顺序。
在一个名为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")
}