javascript - Bagaimana cara mengurutkan di mongoose?
Saya tidak menemukan dokumentasi untuk modifier sort. Satu-satunya wawasan ada di unit test: spec.lib.query.js#L12
writer.limit(5).sort(['test', 1]).group('name')
Tapi itu tidak berhasil untuk saya:
Post.find().sort(['updatedAt', 1]);
Jawaban #1
Di Mongoose, penyortiran 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) { ... });
Jawaban #2
Begini cara saya membuat sort bekerja di 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
})
Jawaban #3
Mulai Mongoose 3.8.x:
model.find({ ... }).sort({ field : criteria}).exec(function(err, model){ ... });
Di mana:
criteria dapat berupa asc, desc, ascending, descending, 1, atau -1
Catatan: Gunakan tanda kutip atau tanda kutip ganda
gunakan "asc", "desc", "ascending", "descending", 1, atau -1
Jawaban #4
PEMBARUAN :
Post.find().sort({'updatedAt': -1}).all((posts) => {
// do something with the array of posts
});
Coba :
Post.find().sort([['updatedAt', 'descending']]).all((posts) => {
// do something with the array of posts
});
Jawaban #5
Mongoose v5.x.x
urutkan berdasarkan urutan naik
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
Jawaban #6
Pembaruan
Ada penjelasan yang lebih baik jika ini membingungkan orang; lihat menemukan dokumen dan cara kerja kueri dalam manual mongoose. Jika Anda ingin menggunakan API yang lancar, Anda bisa mendapatkan objek kueri dengan tidak memberikan callback pada metode find(), jika tidak Anda bisa menentukan parameter seperti yang saya jelaskan di bawah ini.
Asli
Diberikan sebuah objek model, sesuai dengan dokumentasi di Model, inilah cara kerjanya untuk 2.4.1:
Post.find({search-spec}, [return field array], {options}, callback)
search spec mengharapkan sebuah objek, tetapi Anda bisa melewatkan null atau objek kosong.
Parameter kedua adalah daftar bidang sebagai array string, jadi Anda dapat memberikan ['field','field2'] atau null.
Parameter ketiga adalah opsi sebagai sebuah objek, yang mencakup kemampuan untuk mengurutkan himpunan hasil. Anda akan menggunakan { sort: { field: direction } } di mana field adalah nama field string test (dalam kasus Anda) dan direction adalah angka di mana 1 adalah naik dan -1 adalah turun.
Parameter terakhir (callback) adalah fungsi callback yang menerima kumpulan dokumen yang dikembalikan oleh query.
Implementasi Model.find() (pada versi ini) melakukan alokasi geser properti untuk menangani parameter opsional (yang membuat 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);
};
Semoga membantu
Jawaban #7
Anda dapat mengurutkan hasil kueri Anda berdasarkan
Post.find().sort({createdAt: "descending"});Jawaban #8
Begini cara saya membuat sort bekerja di mongoose.js 2.0.4
var query = EmailModel.find({domain:"gmail.com"});
query.sort('priority', 1);
query.exec(function(error, docs){
//...
});
Jawaban #9
Menghubungkan 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 dokumentasi untuk lebih banyak tentang kueri.
