163

我正在将 MongoDB 与 Node.JS 一起使用。我有一个包含日期和其他行的集合。日期是一个 JavaScriptDate对象。

如何按日期对该集合进行排序?

4

10 回答 10

243

对@JohnnyHK 的回答稍作修改

collection.find().sort({datefield: -1}, function(err, cursor){...});

在许多用例中,我们希望返回最新记录(例如最新更新/插入)。

于 2012-12-12T21:17:31.913 回答
65
db.getCollection('').find({}).sort({_id:-1}) 

这将根据插入日期按降序对您的收藏进行排序

于 2017-06-29T01:59:19.963 回答
45

按日期排序不需要任何特殊的东西。只需按集合的所需日期字段排序。

针对 1.4.28 node.js 原生驱动进行了更新,您可以datefield使用以下任何一种方式进行升序排序:

collection.find().sort({datefield: 1}).toArray(function(err, docs) {...});
collection.find().sort('datefield', 1).toArray(function(err, docs) {...});
collection.find().sort([['datefield', 1]]).toArray(function(err, docs) {...});
collection.find({}, {sort: {datefield: 1}}).toArray(function(err, docs) {...});
collection.find({}, {sort: [['datefield', 1]]}).toArray(function(err, docs) {...});

'asc'or'ascending'也可以用来代替1.

要降序排序,请使用'desc','descending'-1代替1.

于 2012-12-12T21:11:16.080 回答
16

Sushant Gupta 的答案有点过时,不再起作用。

下面的代码片段现在应该是这样的:

collection.find({}, {"sort" : ['datefield', 'asc']} ).toArray(function(err,docs) {});

于 2014-07-08T09:27:01.577 回答
12

这对我有用:

collection.find({}, {"sort" : [['datefield', 'asc']]}, function (err, docs) { ... });

使用 Node.js、Express.js 和 Monk

于 2015-01-14T08:00:36.193 回答
7
collection.find().sort('date':1).exec(function(err, doc) {});

这对我有用

参考https://docs.mongodb.org/getting-started/node/query/

于 2016-02-13T08:57:54.217 回答
6

使用猫鼬,它很简单:

collection.find().sort('-date').exec(function(err, collectionItems) {
  // here's your code
})
于 2015-10-19T20:52:02.410 回答
4

排序参数需要额外的方[ ]括号才能工作。

collection.find({}, {"sort" : [['datefield', 'asc']]} ).toArray(function(err,docs) {});
于 2014-08-13T17:06:01.030 回答
3

如果您的日期格式是这样的:14/02/1989 ----> 您可能会发现一些问题

你需要像这样使用 ISOdate :

var start_date = new Date(2012, 07, x, x, x); 

-----> 结果 ------>ISODate("2012-07-14T08:14:00.201Z")

现在只需使用这样的查询:

 collection.find( { query : query ,$orderby :{start_date : -1}} ,function (err, cursor) {...}

而已 :)

于 2015-04-27T14:19:46.480 回答
2

使用 mongoose,我无法使用“toArray”,并且出现错误:TypeError: Collection.find(...).sort(...).toArray is not a function. 来自 Native MongoDB NodeJS 驱动程序(参考)的 Cursor 类中存在 toArray 函数。

也 sort 只接受一个参数,所以你不能在里面传递你的函数。

这对我有用(由Emil回答):

collection.find().sort('-date').exec(function(error, result) {
  // Your code
})
于 2018-06-02T10:39:16.160 回答