我正在使用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
。我怎么能用聚合框架计算文件总数?
答案 0 :(得分:2)
问题在于Model.aggregate doesn't return a Query object这就是count
方法不存在的原因。
无论如何,因为它返回一个承诺,你可以像这样计算你的文档:
adModel.aggregate(pipeline).then(function (docs) {
console.log(docs.length);
});
如果您不喜欢承诺,您仍然可以通过回调:
adModel.aggregate(pipeline, function (err, docs) {
console.log(docs.length);
});