mongoose - 如何限制退回的物品数量?

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

如何将返回的项目限制为仅插入的最新10项?

Running Turtle asked 2019-08-10T13:36:25Z
6个解决方案
154 votes

在最新的mongoose中(编写本文时为3.8.1),你会做两件事:(1)你必须将单个参数传递给sort(),它必须是一个约束数组或一个约束,并且(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
});
marni answered 2019-08-10T13:36:44Z
17 votes

像这样,使用.limit():

var q = models.Post.find({published: true}).sort('date', -1).limit(20);
q.execFind(function(err, posts) {
  // `posts` will be of length 20
});
kcbanner answered 2019-08-10T13:37:09Z
5 votes

我有点懒,所以我喜欢简单的事情:

let users = await Users.find({}, null,{limit: 50});
theCode answered 2019-08-10T13:37:33Z
4 votes
models.Post.find({published: true},{date: 1}, {sort{'date': -1}, limit: 20}, function(err, posts) {
 // `posts` with sorted length of 20
});
Suhail Ahmed answered 2019-08-10T13:37:50Z
1 votes

出于某种原因,我无法使用提议的答案,但我找到另一种变体,使用select,对我有用:

models.Post.find().sort('-date').limit(10).select('published').exec(function(e, data){
        ...
});

API可能改变了吗? 我使用的是3.8.19版本

TGH answered 2019-08-10T13:38:24Z
1 votes

...另外确保使用:

mongoose.Promise = Promise;

这为当地的ES6承诺设定了猫鼬承诺。 没有这个添加我得到:

弃用警告:不推荐使用Mongoose:mpromise(mongoose的默认承诺库),请插入您自己的promise库:[http://mongoosejs.com/docs/promises.html]

Schmalitz answered 2019-08-10T13:39:05Z
translate from https://stackoverflow.com:/questions/5830513/how-do-i-limit-the-number-of-returned-items