MongoDB节点驱动程序当前聚合的计数

我正在使用mongodb的节点,并试图聚集基于一些设置的filter的文件集合,然后将其限制为10.我有它聚合就好,限制就好了,但我需要得到聚合的文件总数之前我限制他们到10。

这是我的代码。

var qry = []; if (filter.FocusArea && filter.FocusArea != "(None)") { qry.push({ $match: { 'ProgramAreaId': filter.FocusArea } }); } if (filter.Status && filter.Status != "(None)") { qry.push({ $match: { 'StatusId': filter.Status } }); } if (filter.ProgOfficer && filter.ProgOfficer != "(None)") { qry.push({ $match: { 'ProgramOfficerId': filter.ProgOfficer } }); } if (filter.Fund && filter.Fund != "(None)") { qry.push({ $match: { 'FundId': filter.Fund } }); } var skipNbr = (parseInt(filter.Page) * 10 - 10); qry.push({ $project: { _id: '$_id', count: { $sum: '$$ROOT' }, content: '$$ROOT'} }) // I would like to do the count here. qry.push({ $skip: skipNbr }) qry.push({ $limit: 10 }) var apps = mongo.collection('Applications').aggregate(qry, function(err, docs) { callback(docs); }); 

这可以在一个聚合查询中完成,还是需要分成两个?

在一个查询中可以这样做。

您可以使用$project project将已过滤的数组$project到两个不同的字段中:一个使用内容,一个使用count。

您可以使用$slice来限制内容数组。

  db.collection.aggregate([ { $match: {} // Filter }, { $group: { _id: 1, array: {$push: '$$ROOT'} } }, { $project: { content: { $slice: ['$array', skip, limit] }, total: { $size: '$array' } } } ], {allowDiskUse: true})