Как ограничить количество возвращаемых товаров?


myModel.find({}, function(err, items){
console.log(items.length);    // big number
});

Как я могу ограничить возвращаемые элементы только последними 10 элементами, которые были вставлены?

5 84

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