Câu trả lời:
Trong mongoose mới nhất (3.8.1 tại thời điểm viết bài), bạn làm hai điều khác nhau: (1) bạn phải truyền một đối số duy nhất cho sort (), phải là một mảng các ràng buộc hoặc chỉ một ràng buộc, và (2 ) executeFind () đã biến mất và thay vào đó là thi hành (). Do đó, với mongoose 3.8.1, bạn sẽ làm điều này:
var q = models.Post.find({published: true}).sort({'date': -1}).limit(20);
q.exec(function(err, posts) {
// `posts` will be of length 20
});
hoặc bạn có thể xâu chuỗi nó lại với nhau đơn giản như vậy:
models.Post
.find({published: true})
.sort({'date': -1})
.limit(20)
.exec(function(err, posts) {
// `posts` will be of length 20
});
Như thế này, sử dụng .limit ():
var q = models.Post.find({published: true}).sort('date', -1).limit(20);
q.execFind(function(err, posts) {
// `posts` will be of length 20
});
models.Post.find({published: true}, {sort: {'date': -1}, limit: 20}, function(err, posts) {
// `posts` with sorted length of 20
});
Tìm thông số
Hàm tìm tham số nhận như sau:
«Object»
.«Object|String»
các trường tùy chọn để trả về, xem Query.prototype.select ()«Object»
tùy chọn xem Query.prototype.setOptions ()«Function»
Làm thế nào để hạn chế
const Post = require('./models/Post');
Post.find(
{ published: true },
null,
{ sort: { 'date': 'asc' }, limit: 20 },
function(error, posts) {
if (error) return `${error} while finding from post collection`;
return posts; // posts with sorted length of 20
}
);
Thông tin thêm
Mongoose cho phép bạn truy vấn bộ sưu tập của mình theo nhiều cách khác nhau như: Tài liệu chính thức
// named john and at least 18
MyModel.find({ name: 'john', age: { $gte: 18 }});
// executes, passing results to callback
MyModel.find({ name: 'john', age: { $gte: 18 }}, function (err, docs) {});
// executes, name LIKE john and only selecting the "name" and "friends" fields
MyModel.find({ name: /john/i }, 'name friends', function (err, docs) { })
// passing options
MyModel.find({ name: /john/i }, null, { skip: 10 })
// passing options and executes
MyModel.find({ name: /john/i }, null, { skip: 10 }, function (err, docs) {});
// executing a query explicitly
var query = MyModel.find({ name: /john/i }, null, { skip: 10 })
query.exec(function (err, docs) {});
// using the promise returned from executing a query
var query = MyModel.find({ name: /john/i }, null, { skip: 10 });
var promise = query.exec();
promise.addBack(function (err, docs) {});
Vì một số lý do, tôi không thể làm cho điều này hoạt động với các câu trả lời được đề xuất, nhưng tôi đã tìm thấy một biến thể khác, sử dụng select, phù hợp với tôi:
models.Post.find().sort('-date').limit(10).select('published').exec(function(e, data){
...
});
Có lẽ api đã thay đổi? Tôi đang sử dụng phiên bản 3.8.19
... ngoài ra, hãy đảm bảo sử dụng:
mongoose.Promise = Promise;
Điều này đặt hứa hẹn mongoose thành hứa hẹn ES6 bản địa. Nếu không có phần bổ sung này, tôi nhận được:
DeprecationCảnh báo: Mongoose: mpromise (thư viện lời hứa mặc định của mongoose) không được dùng nữa, thay vào đó hãy cắm vào thư viện lời hứa của riêng bạn: http://mongoosejs.com/docs/promises.html