Как ограничить количество возвращаемых товаров?
myModel.find({}, function(err, items){
console.log(items.length); // big number
});
Как я могу ограничить возвращаемые элементы только последними 10 элементами, которые были вставлены?
5 ответов:
в последнем мангусте (3.8.1 на момент написания) вы делаете две вещи по-разному: (1) Вы должны передать один аргумент для сортировки (), который должен быть массивом ограничений или только одним ограничением, и (2) execFind () исчез и вместо этого заменен exec (). Поэтому с Мангустом 3.8.1 вы бы сделали это:
var q = models.Post.find({published: true}).sort({'date': -1}).limit(20); q.exec(function(err, posts) { // `posts` will be of length 20 });
или вы можете связать его вместе просто так:
models.Post .find({published: true}) .sort({'date': -1}) .limit(20) .exec(function(err, posts) { // `posts` will be of length 20 });
вот так, используя .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},{date: 1}, {sort{'date': -1}, limit: 20}, function(err, posts) { // `posts` with sorted length of 20 });
по какой-то причине я не мог заставить это работать с предлагаемыми ответами, но я нашел другой вариант, используя select, который работал для меня:
models.Post.find().sort('-date').limit(10).select('published').exec(function(e, data){ ... });
возможно ли изменить api? Я использую версию 3.8.19
...дополнительно убедитесь, что вы используете:
mongoose.Promise = Promise;
это устанавливает обещание мангуста к родному обещанию ES6. Без этого дополнения я получил:
DeprecationWarning: Мангуст: mpromise (библиотека обещаний мангуста по умолчанию) устарела, вместо этого подключите свою собственную библиотеку обещаний:http://mongoosejs.com/docs/promises.html