Return 在限制前计数并跳过与 mongoose 一起应用
Return count before limit and skip applied with mongoose
我有一个用 mongoose 定义的模式。当我想检索我调用的所有项目时
Item
.find()
.limit(limit)
.skip(skip)
.exec(function (err, Items) {
if(err) { return handleError(res, err); }
return res.json(200, Items);
});
将来我想执行一些过滤,然后计算结果的数量。如何在应用限制和跳过之前在响应中包含结果数?
我尝试在找到后包含 count(),但没有成功。我错过了什么?
我认为两个查询是必要的,您可以并行执行它们:
var Promise = require('bluebird');
Promise.all([
Item.find().limit(limit).skip(skip).exec(),
Item.count().exec()
]).spread(function(items, count) {
res.json(200, { items: items, count: count });
}, function(err) {
handleError(res, err);
});
请注意,我调整了 JSON 响应格式以适应包含计数的新 属性 -- 我已将响应从数组更改为 { items: Array, count: Number }
.
调用 .exec()
而不传递回调 returns a Mongoose Promise. In the example above, I'm using Bluebird (npm install bluebird
) 来管理异步流,但您可以使用您选择的任何其他库作为嗯。
我有一个用 mongoose 定义的模式。当我想检索我调用的所有项目时
Item
.find()
.limit(limit)
.skip(skip)
.exec(function (err, Items) {
if(err) { return handleError(res, err); }
return res.json(200, Items);
});
将来我想执行一些过滤,然后计算结果的数量。如何在应用限制和跳过之前在响应中包含结果数?
我尝试在找到后包含 count(),但没有成功。我错过了什么?
我认为两个查询是必要的,您可以并行执行它们:
var Promise = require('bluebird');
Promise.all([
Item.find().limit(limit).skip(skip).exec(),
Item.count().exec()
]).spread(function(items, count) {
res.json(200, { items: items, count: count });
}, function(err) {
handleError(res, err);
});
请注意,我调整了 JSON 响应格式以适应包含计数的新 属性 -- 我已将响应从数组更改为 { items: Array, count: Number }
.
调用 .exec()
而不传递回调 returns a Mongoose Promise. In the example above, I'm using Bluebird (npm install bluebird
) 来管理异步流,但您可以使用您选择的任何其他库作为嗯。