首页 > 解决方案 > 如何通过在猫鼬中分组返回两个匹配条件的计数值?

问题描述

我希望我的输出 json 如下所示,

[ {
        "_id": "IT",
        "count 1": 1,
        "count 2": 1,

    },
    {
        "_id": "CSE",
        "count1": 1,
        "count2": 2,

    },

  
]

我在猫鼬中尝试了以下查询

{
    $match: {

        
        riskstatus: { $in: ["Closed", "Deffered"] },
        riskstatus: { $in: [ "Open"] },
    }
},

{

    "$group": {
        "_id": "$phase",
        "count1": { "$sum": 1 },
       "count2": { "$sum": 1 },

    },

}
        

我的输入集合是

{"_id":"5df5ca73bb1c4526948e2421","comment":"test","status":"Open","phase":"CSE"}
{"_id":"5df5ca73bb1c4526948e2422","comment":"test","status":"closed","phase":"IT"}
{"_id":"5df5ca73bb1c4526948e2422","comment":"test","status":"Closed","phase":"CSE"}
{"_id":"5df5ca73bb1c4526948e2422","comment":"test","status":"Open","phase":"IT"}
{"_id":"5df5ca73bb1c4526948e2422","comment":"test","status":"Open","phase":"CSE"}

如何检索具有上述匹配条件的同一组的两个计数值以实现此结果?

我试过的最新的是

Risk.aggregate([
        { $match: { $or: [ { status: {$in: ["Closed", "Deffered"]} }, { status: {$in: ["Open"] } } ] } },
  

        {

            "$group": {
                "_id": "$phase",
                " count1": { "$sum": 1 },
                "count2": { "$sum": 1 },

            },

        }

标签: node.jsmongodb

解决方案


请使用该查询

     db.posts.aggregate(
    {
        $group: {
            _id: { 'id': '$phase', 'status': '$status' },
            count_1: { '$sum': 1 },
        }
    },
    { $project: { '_id': 0, 'depart': '$_id.id', 'status': '$_id.status', 'count_1': 1 } }
    , {
        $group: {
            _id: '$depart',
            data: {
                '$push': {
                    'depart': '$depart',
                    'count_1': {
                        $cond: [{ $eq: ["$status", 'Open'] }, '$count_1', 0]
                    },
                    'count_2': {
                        $cond: [{ $eq: ["$status", 'Closed'] }, '$count_1', 0]
                    }
                    ,
                    'count_3': {
                        $cond: [{ $eq: ["$status", 'Deffered'] }, '$count_1', 0]
                    }

                },
            }
        }
    },
      { $project: 
      {'name':'$_id','_id':0, 
      openCount: { $max: "$data.count_1"}, 
      Othercount: {  
          $add:[ 
              {$max: "$data.count_2"},
              {$max: "$data.count_3"}]

      } 

      }}

)

推荐阅读