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