如何在节点js猫鼬聚合中一起使用$ count和$ project

时间:2019-12-21 10:45:35

标签: node.js mongodb mongoose

我正在尝试获取一些经过过滤的数据,它是总数。我想在单个查询中完成这两项工作,所以我该怎么做。下面是我的代码。

var SubId = 1;
var TypeId = 1;
var lookup = {
      $lookup:
      {
         from: 'sub_types',
         localField: 'sub_id',
         foreignField: 'sub_id',
         as: 'sub_category'
      }
   };

var unwind = { $unwind: "$sub_category" };

var project = {
      "ques_id": 1,
      "ques_txt": 1,
      "ans_txt": 1,
      "ielts_sub_id": 1,
      "ielts_tags_id": 1,
   };

var match = {
      "sub_category.type_id": parseInt(TypeId),
      "sub_category.sub_id": parseInt(SubId),
      "status": 1
   };
ieltsmongoose.collection('ques').aggregate([
  lookup, unwind,
  {
     $match: match
  },
  {
     $project: project
  }
]).limit(max_row).toArray(async function (error, Ques) {....});

现在我想用

这样的查询来计数
{
     $count: "totalcount"
},

1 个答案:

答案 0 :(得分:0)

您可以使用另一个称为aggregate的{​​{1}}阶段来实现您的目标:

group

您的聚合将类似于:

{ "$group": { 
        "_id": null, 
        "count": { "$sum": 1}, 
        "data": { "$push": "$$ROOT"  }
}}

您还应将限制和偏移量与ieltsmongoose.collection('ques').aggregate([ lookup, unwind, { $match: match }, { $project: project }, { "$group": { "_id": null, "count": { "$sum": 1}, "data": { "$push": "$$ROOT" } } } ]) $limit一起用作聚集阶段