202

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

    Room.find({}, (err,docs) => {
    
    }).sort({date:-1}); 

这不行!

4

11 回答 11

529

Mongoose 中的排序随着版本的发展而演变,因此其中一些答案不再有效。从Mongoose 4.1.xdate版本开始,可以通过以下任何一种方式对字段进行降序排序:

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

对于升序排序,省略-字符串版本的前缀或使用1asc或的值ascending

于 2013-02-26T03:57:41.190 回答
58

正确答案是:

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

});
于 2011-04-29T10:48:55.707 回答
17

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

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

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

于 2012-12-28T04:20:20.423 回答
8
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
});
于 2013-02-26T03:26:50.883 回答
4

我这样做:

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

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

于 2015-02-06T19:02:09.547 回答
2

看看这是否有帮助 >如何在猫鼬中排序?

另请阅读 > http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order

于 2011-04-28T22:12:00.750 回答
2

简短的解决方案:

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

Room.find(query, projection, options).exec(function(err, docs) { ... });
于 2017-10-05T13:02:24.857 回答
2

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

于 2021-07-31T17:52:50.680 回答
1

这个对我有用。

`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});
 });`
于 2020-07-25T13:25:35.063 回答
1

带有 Koa 的 ES6 解决方案。

  async recent() {
    data = await ReadSchema.find({}, { sort: 'created_at' });
    ctx.body = data;
  }
于 2020-12-16T06:22:56.297 回答
0

您也可以按_id字段排序。例如,要获取最近的记录,您可以这样做,

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

它也快得多,因为我非常愿意打赌你的date领域没有被索引。

于 2020-02-08T11:02:34.090 回答