如何在mongoose中排序?

IT技术 javascript node.js mongodb mongoose
2021-02-12 11:55:59

我没有找到排序修饰符的文档。唯一的见解是在单元测试中: spec.lib.query.js#L12

writer.limit(5).sort(['test', 1]).group('name')

但这对我不起作用:

Post.find().sort(['updatedAt', 1]);
6个回答

在 Mongoose 中,可以通过以下任何一种方式进行排序:

    Post.find({}).sort('test').exec(function(err, docs) { ... });
    Post.find({}).sort([['date', -1]]).exec(function(err, docs) { ... });
    Post.find({}).sort({test: 1}).exec(function(err, docs) { ... });
    Post.find({}, null, {sort: {date: 1}}, function(err, docs) { ... });
@steampowered 谢谢,我会进行编辑,如果我弄错了,欢迎您告诉我或编辑。
2021-04-01 11:55:59
这几乎是 Francisco Presencia 链接的答案的直接副本。不幸的是,投票最高的答案已经过时且不必要地冗长。
2021-04-10 11:55:59
这在今天并不完全正确。{sort: [['date', 1]]}不会工作,但 .sort([['date', -1]])会工作。看到这个答案:stackoverflow.com/a/15081087/404699
2021-04-10 11:55:59

这就是我在mongoose 2.3.0 中工作的方式:)

// Find First 10 News Items
News.find({
    deal_id:deal._id // Search Filters
},
['type','date_added'], // Columns to Return
{
    skip:0, // Starting Row
    limit:10, // Ending Row
    sort:{
        date_added: -1 //Sort by Date Added DESC
    }
},
function(err,allNews){
    socket.emit('news-load', allNews); // Do something with the array of 10 objects
})
在mongoose 3 中,您不能再Array用于字段选择 - 它必须是StringObject
2021-03-21 11:55:59
顺便说一句,如果你想要所有的领域,你可以把null那个部分进来(至少在 3.8 中)
2021-04-09 11:55:59

从mongoose 3.8.x 开始:

model.find({ ... }).sort({ field : criteria}).exec(function(err, model){ ... });

在哪里:

criteria可以是asc, desc, ascending, descending, 1, 或-1

注意:使用引号或双引号

使用"asc", "desc", "ascending", "descending", 1, 或-1

更新:

Post.find().sort({'updatedAt': -1}).all((posts) => {
  // do something with the array of posts
});

尝试:

Post.find().sort([['updatedAt', 'descending']]).all((posts) => {
  // do something with the array of posts
});
all() must be used after where() when called with these arguments在mongoose 4.6.5 中有一个...
2021-03-20 11:55:59
在最新的 Mongoose (2.4.10) 中,它是.sort("updatedAt", -1).
2021-03-21 11:55:59
那么你应该使用exec(function (posts) {…而不是all
2021-04-01 11:55:59
在最新的 Mongoose(3.5.6-pre,但我很确定它对所有 3.x 版本都有效)中,它是.sort({updatedAt: -1}).sort('-updatedAt').
2021-04-11 11:55:59

mongoose v5.xx

按升序排序

Post.find({}).sort('field').exec(function(err, docs) { ... });
Post.find({}).sort({ field: 'asc' }).exec(function(err, docs) { ... });
Post.find({}).sort({ field: 'ascending' }).exec(function(err, docs) { ... });
Post.find({}).sort({ field: 1 }).exec(function(err, docs) { ... });

Post.find({}, null, {sort: { field : 'asc' }}), function(err, docs) { ... });
Post.find({}, null, {sort: { field : 'ascending' }}), function(err, docs) { ... });
Post.find({}, null, {sort: { field : 1 }}), function(err, docs) { ... });

按降序排序

Post.find({}).sort('-field').exec(function(err, docs) { ... });
Post.find({}).sort({ field: 'desc' }).exec(function(err, docs) { ... });
Post.find({}).sort({ field: 'descending' }).exec(function(err, docs) { ... });
Post.find({}).sort({ field: -1 }).exec(function(err, docs) { ... });


Post.find({}, null, {sort: { field : 'desc' }}), function(err, docs) { ... });
Post.find({}, null, {sort: { field : 'descending' }}), function(err, docs) { ... });
Post.find({}, null, {sort: { field : -1 }}), function(err, docs) { ... });

详情:https : //mongoosejs.com/docs/api.html#query_Query-sort

正如@Sunny Sultan 所指出的,预示着Post.find({}, null, {sort: '-field'}, function(err, docs) { ... });下降和Post.find({}, null, {sort: 'field'}, function(err, docs) { ... });上升的工作也是如此。事实上,当我在 http 查询参数中传递字段和排序顺序时,将它们组合成一个字符串并使用这种方式对我的 bd 查询进行排序是我唯一的选择。
2021-04-11 11:55:59