Bagaimana cara menyortir luwak?


Jawaban:


157

Dalam bahasa Mongoose, pengurutan dapat dilakukan dengan salah satu cara berikut:

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) { ... });

5
Ini hampir merupakan salinan langsung dari jawaban yang dihubungkan oleh Francisco Presencia. Sayangnya jawaban terpilih tertinggi sudah usang dan lama tidak perlu.
iwein

2
Ini tidak sepenuhnya benar pada hari ini. {sort: [['date', 1]]}tidak akan bekerja, tetapi .sort([['date', -1]])akan bekerja. Lihat jawaban ini: stackoverflow.com/a/15081087/404699
steampowered

@steampowered terima kasih, saya akan melakukan pengeditan, Anda dipersilakan untuk memberi tahu atau mengedit jika saya salah.
iwein

135

Ini adalah bagaimana saya dapat menyortir luwak 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
})

7
dalam luwak 3 Anda tidak dapat menggunakan Arrayuntuk pemilihan bidang lagi - harus StringatauObject
pkyeck

4
btw, jika Anda ingin semua bidang, Anda bisa menarik nullbagian itu (setidaknya dalam 3,8)
MalcolmOcean

63

Mulai dari Mongoose 3.8.x:

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

Dimana:

criteriabisa asc, desc, ascending, descending, 1, atau-1


52

MEMPERBARUI:

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

Mencoba:

Post.find().sort([['updatedAt', 'descending']]).all((posts) => {
  // do something with the array of posts
});

13
Dalam Mongoose terbaru (2.4.10) itu .sort("updatedAt", -1).
Marcel Jackwerth

43
Dalam Mongoose yang lebih baru (3.5.6-pre, tapi saya cukup yakin itu berlaku untuk semua 3.x) itu .sort({updatedAt: -1})atau .sort('-updatedAt').
Andreas Hultgren

2
Maka Anda harus menggunakan exec(function (posts) {…sebagai gantinyaall
Buzut

Saya mendapat all() must be used after where() when called with these argumentsdalam Mongoose 4.6.5 ...
Dam Fa

25

Mongoose v5.4.3

urutkan berdasarkan urutan menaik

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) { ... });

urutkan berdasarkan urutan menurun

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) { ... });

Untuk Detail: https://mongoosejs.com/docs/api.html#query_Query-sort


23

Memperbarui

Ada tulisan yang lebih baik jika ini membingungkan orang; lihat dokumen temuan dan bagaimana kueri bekerja dalam manual luwak. Jika Anda ingin menggunakan api fasih Anda bisa mendapatkan objek permintaan dengan tidak memberikan panggilan balik ke find()metode, jika tidak, Anda dapat menentukan parameter seperti yang saya uraikan di bawah ini.

Asli

Diberikan modelobjek, per dokumen pada Model , ini adalah cara kerjanya 2.4.1:

Post.find({search-spec}, [return field array], {options}, callback)

Yang search specmengharapkan suatu objek, tetapi Anda bisa lewat nullatau objek kosong.

Param kedua adalah daftar bidang sebagai array string, jadi Anda akan memberikan ['field','field2']atau null.

Param ketiga adalah opsi sebagai objek, yang mencakup kemampuan untuk mengurutkan set hasil. Anda akan menggunakan di { sort: { field: direction } }mana fieldstring fieldname test(dalam kasus Anda) dan directionmerupakan nomor di mana 1naik dan -1desceding.

Param terakhir ( callback) adalah fungsi callback yang menerima kumpulan dokumen yang dikembalikan oleh kueri.

The Model.find()pelaksanaan (di versi ini) melakukan alokasi geser properti untuk menangani params opsional (yang adalah apa yang saya bingung!):

Model.find = function find (conditions, fields, options, callback) {
  if ('function' == typeof conditions) {
    callback = conditions;
    conditions = {};
    fields = null;
    options = null;
  } else if ('function' == typeof fields) {
    callback = fields;
    fields = null;
    options = null;
  } else if ('function' == typeof options) {
    callback = options;
    options = null;
  }

  var query = new Query(conditions, options).select(fields).bind(this, 'find');

  if ('undefined' === typeof callback)
    return query;

  this._applyNamedScope(query);
  return query.find(callback);
};

HTH


untuk proyeksi: kita perlu memberikan string yang berisi nama kolom yang dipisahkan dengan spasi.
maddy

11

Ini adalah bagaimana saya dapat menyortir bekerja di mongoose.js 2.0.4

var query = EmailModel.find({domain:"gmail.com"});
query.sort('priority', 1);
query.exec(function(error, docs){
  //...
});

10

Rantai dengan antarmuka pembuat kueri di Mongoose 4.

// Build up a query using chaining syntax. Since no callback is passed this will create an instance of Query.
var query = Person.
    find({ occupation: /host/ }).
    where('name.last').equals('Ghost'). // find each Person with a last name matching 'Ghost'
    where('age').gt(17).lt(66).
    where('likes').in(['vaporizing', 'talking']).
    limit(10).
    sort('-occupation'). // sort by occupation in decreasing order
    select('name occupation'); // selecting the `name` and `occupation` fields


// Excute the query at a later time.
query.exec(function (err, person) {
    if (err) return handleError(err);
    console.log('%s %s is a %s.', person.name.first, person.name.last, person.occupation) // Space Ghost is a talk show host
})

Lihat dokumen untuk lebih lanjut tentang kueri.


4

dengan versi luwak (1.6.0) saat ini jika Anda hanya ingin mengurutkan berdasarkan satu kolom, Anda harus meletakkan array dan meneruskan objek langsung ke fungsi sort ():

Content.find().sort('created', 'descending').execFind( ... );

Butuh waktu beberapa lama untuk melakukan ini :(


Terima kasih. posting Anda membantu saya. Saya juga menghadapi ini.
user644745

4
app.get('/getting',function(req,res){
    Blog.find({}).limit(4).skip(2).sort({age:-1}).then((resu)=>{
        res.send(resu);
        console.log(resu)
        // console.log(result)
    })
})

Keluaran

[ { _id: 5c2eec3b8d6e5c20ed2f040e, name: 'e', age: 5, __v: 0 },
  { _id: 5c2eec0c8d6e5c20ed2f040d, name: 'd', age: 4, __v: 0 },
  { _id: 5c2eec048d6e5c20ed2f040c, name: 'c', age: 3, __v: 0 },
  { _id: 5c2eebf48d6e5c20ed2f040b, name: 'b', age: 2, __v: 0 } ]

3

Beginilah cara saya menyortir dan mengisi:

Model.find()
.sort('date', -1)
.populate('authors')
.exec(function(err, docs) {
    // code here
})


2

Yang lain bekerja untuk saya, tetapi ini berhasil:

  Tag.find().sort('name', 1).run(onComplete);

2
Post.find().sort({updatedAt:1}).exec(function (err, posts){
...
});


1

Mulai dari 4.x metode pengurutan telah diubah. Jika Anda menggunakan> 4.x. Coba gunakan salah satu dari yang berikut ini.

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

0
Post.find().sort('updatedAt').exec((err, post) => {...});

1
Hai dan selamat datang di komunitas. Meskipun jawaban Anda mungkin memberikan solusi, jawaban yang baik membutuhkan beberapa penjelasan. Mohon tambahkan beberapa referensi dan penjelasan yang tepat.
Panda
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.