如何统计聚合查询?
How to count aggregate query?
我正在使用 mongoose/nodejs 应用程序构建分页并具有以下代码:
var Query = Model.find(
"location": {
"$geoWithin": {
"$box": [
[165.8694369, -52.61941849999999],
[175.831536, -29.2313419]
]
}
}
});
// Get count of documents
return Query.count(function (err, totalCount) {
if (err) throw err;
// Get paginated list
return Query.
find().
skip(skip).
limit(limit).
exec(function (err, results) {
if (err) throw err;
// return result
});
在前面的代码中,我得到 totalCount
在客户端构建分页并且工作正常。但现在我需要使用 aggregate
而不是 find
并尝试以下操作:
// Construct pipeline
var pipeline = [{
"$geoNear": {
"near": [165.8694369, -52.61941849999999],
"distanceField": "distance"
}
}];
var Query = adModel.aggregate(pipeline);
// Get count of documents
return Query.count(function (err, totalCount) {
if (err) throw err;
但不幸的是我得到了错误 count() method does not exists
。我怎么能用聚合框架计算文档总数?
问题是 Model.aggregate doesn't return a Query object 这就是 count
方法不存在的原因。
无论如何,因为它 returns 一个承诺,你可以这样计算你的文档:
adModel.aggregate(pipeline).then(function (docs) {
console.log(docs.length);
});
如果您不喜欢 promise,您仍然可以传递回调:
adModel.aggregate(pipeline, function (err, docs) {
console.log(docs.length);
});
我正在使用 mongoose/nodejs 应用程序构建分页并具有以下代码:
var Query = Model.find(
"location": {
"$geoWithin": {
"$box": [
[165.8694369, -52.61941849999999],
[175.831536, -29.2313419]
]
}
}
});
// Get count of documents
return Query.count(function (err, totalCount) {
if (err) throw err;
// Get paginated list
return Query.
find().
skip(skip).
limit(limit).
exec(function (err, results) {
if (err) throw err;
// return result
});
在前面的代码中,我得到 totalCount
在客户端构建分页并且工作正常。但现在我需要使用 aggregate
而不是 find
并尝试以下操作:
// Construct pipeline
var pipeline = [{
"$geoNear": {
"near": [165.8694369, -52.61941849999999],
"distanceField": "distance"
}
}];
var Query = adModel.aggregate(pipeline);
// Get count of documents
return Query.count(function (err, totalCount) {
if (err) throw err;
但不幸的是我得到了错误 count() method does not exists
。我怎么能用聚合框架计算文档总数?
问题是 Model.aggregate doesn't return a Query object 这就是 count
方法不存在的原因。
无论如何,因为它 returns 一个承诺,你可以这样计算你的文档:
adModel.aggregate(pipeline).then(function (docs) {
console.log(docs.length);
});
如果您不喜欢 promise,您仍然可以传递回调:
adModel.aggregate(pipeline, function (err, docs) {
console.log(docs.length);
});