Mongoose 如何限制退货数量?

Mongoose 如何限制退货数量?,mongoose,Mongoose,如何将返回的项目限制为仅插入的最近10个项目?像这样,使用.limit() 在最新的mongoose(编写本文时为3.8.1)中,有两种不同的做法:(1)必须将单个参数传递给sort(),该参数必须是一个约束数组或仅一个约束;(2)execFind()消失,取而代之的是exec()。因此,在mongoose 3.8.1中,您可以这样做: var q = models.Post.find({published: true}).sort('date', -1).limit(20); q.execFi

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

像这样,使用.limit()

在最新的mongoose(编写本文时为3.8.1)中,有两种不同的做法:(1)必须将单个参数传递给sort(),该参数必须是一个约束数组或仅一个约束;(2)execFind()消失,取而代之的是exec()。因此,在mongoose 3.8.1中,您可以这样做:

var q = models.Post.find({published: true}).sort('date', -1).limit(20);
q.execFind(function(err, posts) {
  // `posts` will be of length 20
});
或者,您可以像这样简单地将其链接在一起:

var q = models.Post.find({published: true}).sort({'date': -1}).limit(20);
q.exec(function(err, posts) {
     // `posts` will be of length 20
});

出于某种原因,我无法将其用于建议的答案,但我发现另一种变体,使用select,对我有效:

models.Post
  .find({published: true})
  .sort({'date': -1})
  .limit(20)
  .exec(function(err, posts) {
       // `posts` will be of length 20
  });

api可能已经改变了吗?我使用的是3.8.19版

…另外,请确保使用:

models.Post.find().sort('-date').limit(10).select('published').exec(function(e, data){
        ...
});
models.Post.find({published: true}, {sort: {'date': -1}, limit: 20}, function(err, posts) {
 // `posts` with sorted length of 20
});
这将mongoose承诺设置为本地ES6承诺。没有这一点,我得到:

弃用警告:Mongoose:mpromise(Mongoose的默认承诺库)已弃用,请插入您自己的承诺库:


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

mongoose.Promise = Promise;

查找参数

“查找”函数的参数如下所示:

  • 条件
    «对象»
  • [投影]
    «对象|字符串»
    要返回的可选字段,请参阅
  • [选项]
    «对象»
    可选请参见
  • [回调]
    «函数»
  • 如何限制

    const Post=require('./models/Post');
    Post.find(
    {已发布:true},
    无效的
    {排序:{'date':'asc'},限制:20},
    功能(错误、帖子){
    if(error)在从后期集合查找时返回“${error}”;
    return posts;//排序长度为20的posts
    }
    );
    
    额外信息

    Mongoose允许您以不同的方式查询您的收藏,如:

    //名叫约翰,至少18岁
    查找({name:'john',age:{$gte:18}});
    //执行,将结果传递给回调
    find({name:'john',age:{$gte:18}},函数(err,docs){});
    //执行,像john一样命名,只选择“name”和“friends”字段
    MyModel.find({name:/john/i},'name friends',函数(err,docs){})
    //传球选择
    MyModel.find({name:/john/i},null,{skip:10})
    //传递选项并执行
    find({name:/john/i},null,{skip:10},函数(err,docs){});
    //显式执行查询
    var query=MyModel.find({name:/john/i},null,{skip:10})
    exec(函数(err,docs){});
    //使用执行查询返回的承诺
    var query=MyModel.find({name:/john/i},null,{skip:10});
    var promise=query.exec();
    addBack(函数(err,docs){});
    
    非常感谢,我不知道你能提出这样的问题。我在哪里可以找到关于这个execFind方法的文档格式呢?老实说,我只看mongoose源代码中的例子,以及测试用例。邮件列表也很好。实际文档似乎有点过时。execFind是否仍在最新版本的mongoosejs中?@Manny不是。查看marni的答案以获得更新版本。{'date':-1}是什么意思?提前谢谢@ArslArsl-结果将按日期按降序排序。@ArslArsl类似于以下内容:
    {date:'desc'}
    {date:'descending'}
    。看到了吗?这个代码片段可能会解决这个问题,包括解释如何以及为什么解决这个问题以提高你的文章质量。记住,你是在将来回答读者的问题,而不仅仅是现在提问的人!请在回答中添加解释,并说明适用的限制和假设。
    mongoose.Promise = Promise;
    
    let users = await Users.find({}, null, {limit: 50});