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

问题描述 投票:0回答:1

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

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"
},
node.js mongodb mongoose
1个回答
0
投票

您可以使用另一个名为aggregategroup阶段来实现您的目标:

{ "$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$skip一起用作聚集阶段>

© www.soinside.com 2019 - 2024. All rights reserved.