如何在MongoDB中按日期对集合进行排序?

时间:2012-12-12 20:09:28

标签: node.js mongodb

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

如何按日期对此收藏品进行排序?

10 个答案:

答案 0 :(得分:144)

对@JohnnyHK答案稍作修改

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

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

答案 1 :(得分:33)

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

针对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''ascending'也可用于代替1

要对降序进行排序,请使用'desc''descending'-1代替1

答案 2 :(得分:16)

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

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

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

答案 3 :(得分:15)

db.getCollection('').find({}).sort({_id:-1}) 

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

答案 4 :(得分:12)

这对我有用:

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

使用Node.js,Express.js和Monk

答案 5 :(得分:6)

collection.find().sort('date':1).exec(function(err, doc) {});

这对我有用

提到https://docs.mongodb.org/getting-started/node/query/

答案 6 :(得分:5)

使用猫鼬它就像:

一样简单
collection.find().sort('-date').exec(function(err, collectionItems) {
  // here's your code
})

答案 7 :(得分:4)

附加方格 [] 要使排序参数起作用,需要使用方括号。

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

答案 8 :(得分:2)

如果您的日期格式如下: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) {...}

它是:)

答案 9 :(得分:0)

使用猫鼬,我无法使用' toArray',并收到错误:TypeError: Collection.find(...).sort(...).toArray is not a function. toArray函数存在于Native MongoDB NodeJS驱动程序(reference)的Cursor类中。

此外,sort只接受一个参数,因此您无法在其中传递函数。

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

collection.find().sort('-date').exec(function(error, result) {
  // Your code
})