在Mongoose中,我如何按日期排序? (的node.js)

时间:2011-04-28 21:55:20

标签: node.js mongodb mongoose

假设我在Mongoose中运行此查询:

Room.find({}, function(err,docs){

}).sort({date:-1}); 

这不起作用!

11 个答案:

答案 0 :(得分:370)

Mongoose中的

Sorting已在这些版本中发展,以至于其中一些答案不再有效。从Mongoose的 4.1.x 版本开始,可以通过以下任何方式对date字段进行降序排序:

Room.find({}).sort('-date').exec(function(err, docs) { ... });
Room.find({}).sort({date: -1}).exec(function(err, docs) { ... });
Room.find({}).sort({date: 'desc'}).exec(function(err, docs) { ... });
Room.find({}).sort({date: 'descending'}).exec(function(err, docs) { ... });
Room.find({}).sort([['date', -1]]).exec(function(err, docs) { ... });
Room.find({}, null, {sort: '-date'}, function(err, docs) { ... });
Room.find({}, null, {sort: {date: -1}}, function(err, docs) { ... });

对于升序排序,请在字符串版本上省略-前缀,或使用1ascascending的值。

答案 1 :(得分:52)

正确答案是:

Blah.find({}).sort({date: -1}).execFind(function(err,docs){

});

答案 2 :(得分:12)

今天使用Mongoose 3.5(.2)处理这个问题并没有一个答案帮助我解决了这个问题。以下代码片段可以解决这个问题

Post.find().sort('-posted').find(function (err, posts) {
    // user posts array
});

您可以向find()发送所需的任何标准参数(例如where子句和返回字段),但回调。如果没有回调,它将返回一个链接sort()的Query对象。您需要再次调用find()(有或没有更多参数 - 出于效率原因不需要任何参数),这样您就可以在回调中获得结果集。

答案 3 :(得分:4)

Post.find().sort({date:-1}, function(err, posts){
});

也应该有用

修改

如果您收到错误sort() only takes 1 Argument

,也可以尝试使用此功能
Post.find({}, {
    '_id': 0,    // select keys to return here
}, {sort: '-date'}, function(err, posts) {
    // use it here
});

答案 4 :(得分:4)

我这样做:

Data.find( { $query: { user: req.user }, $orderby: { dateAdded: -1 } } function ( results ) {
    ...
})

这将首先显示最新的内容。

答案 5 :(得分:1)

答案 6 :(得分:1)

简短解决方案:

const query = {}
const projection = {}
const options = { sort: { id: 1 }, limit: 2, skip: 10 }

Room.find(query, projection, options).exec(function(err, docs) { ... });

答案 7 :(得分:0)

您还可以按_id字段进行排序。例如,要获取最新记录,您可以这样做

const mostRecentRecord = await db.collection.findOne().sort({ _id: -1 });

它也更快,因为我敢打赌您的date字段未编入索引。

答案 8 :(得分:0)

这个对我有用。

`Post.find().sort({postedon: -1}).find(function (err, sortedposts){
    if (err) 
        return res.status(500).send({ message: "No Posts." });
    res.status(200).send({sortedposts : sortedposts});
 });`

答案 9 :(得分:0)

带有Koa的ES6解决方案。

  async recent() {
    data = await ReadSchema.find({}, { sort: 'created_at' });
    ctx.body = data;
  }

答案 10 :(得分:0)

这里的所有 anwsers 实际上都是正确的,但是我写我的 anwser 是为了明确有时写 '-date' 或 date: -1 将不起作用,如果您没有名为 'date' 的字段在您的模型中,或者如果您在创建模型时在选项中传递了选项:timestamps: true。如果您使用的是 timestamps: true,那么您需要输入:sort({createdAt: -1}) 然后这将起作用。