我正在将 MongoDB 与 Node.JS 一起使用。我有一个包含日期和其他行的集合。日期是一个 JavaScriptDate
对象。
如何按日期对该集合进行排序?
对@JohnnyHK 的回答稍作修改
collection.find().sort({datefield: -1}, function(err, cursor){...});
在许多用例中,我们希望返回最新记录(例如最新更新/插入)。
db.getCollection('').find({}).sort({_id:-1})
这将根据插入日期按降序对您的收藏进行排序
按日期排序不需要任何特殊的东西。只需按集合的所需日期字段排序。
针对 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
.
Sushant Gupta 的答案有点过时,不再起作用。
下面的代码片段现在应该是这样的:
collection.find({}, {"sort" : ['datefield', 'asc']} ).toArray(function(err,docs) {});
这对我有用:
collection.find({}, {"sort" : [['datefield', 'asc']]}, function (err, docs) { ... });
使用 Node.js、Express.js 和 Monk
collection.find().sort('date':1).exec(function(err, doc) {});
这对我有用
使用猫鼬,它很简单:
collection.find().sort('-date').exec(function(err, collectionItems) {
// here's your code
})
排序参数需要额外的方[ ]括号才能工作。
collection.find({}, {"sort" : [['datefield', 'asc']]} ).toArray(function(err,docs) {});
如果您的日期格式是这样的: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) {...}
而已 :)
使用 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
})