Mongodb query mongodb聚合不同计数

Mongodb query mongodb聚合不同计数,mongodb-query,aggregation-framework,Mongodb Query,Aggregation Framework,意识到这个话题已经被问过很多次了,但是这些建议并没有帮助我解决这个问题 以下查询试图使用ISODay确定给定工作日是否存在销售。因为查询将在月初运行,所以我需要知道该月发生了多少次特定的ISOday var query = { eventType: 'Sale', site : 4, tank: 1, txnDate : { "$gt" : new Date('2018-08-01T00:00:00') } }; db.tankevent.aggregate([ { $ma

意识到这个话题已经被问过很多次了,但是这些建议并没有帮助我解决这个问题

以下查询试图使用ISODay确定给定工作日是否存在销售。因为查询将在月初运行,所以我需要知道该月发生了多少次特定的ISOday

var query = { eventType: 'Sale', site : 4, tank: 1, txnDate : { "$gt" : new Date('2018-08-01T00:00:00') } };

db.tankevent.aggregate([
          { $match: query },
          { $project : { 
              isoDay: { $isoDayOfWeek: "$txnDate" },
              dayDate: { $dateToString: { format: "%d", date:"$txnDate" } }
              } 
          },
          { $group: 
              { _id : { isoday: "$isoDay", dday: "$dayDate" }, count: { "$sum" : 1 } }
          },
          { $sort: { "_id.isoday": 1, "_id.dday": 1 } }

 ]) 
提供以下输出

/* 1 */
{
    "_id" : {
        "isoday" : 1,
        "dday" : "06"
    },
    "count" : 62.0
}

/* 2 */
{
    "_id" : {
        "isoday" : 1,
        "dday" : "13"
    },
    "count" : 69.0
}

/* 3 */
{
    "_id" : {
        "isoday" : 1,
        "dday" : "20"
    },
    "count" : 72.0
}

/* 4 */
{
    "_id" : {
        "isoday" : 2,
        "dday" : "07"
    },
    "count" : 75.0
}

我试图让“count”表示唯一的“dday”记录的数量-因此使用上面的输出,我希望isoDay=1的计数为“3”。此时,count正在报告组组合中发生的销售事件数

您需要做的就是将分组两次

db.tankevent.aggregate([
      { $match: query },
      { $project : { 
          isoDay: { $isoDayOfWeek: "$txnDate" },
          dayDate: { $dateToString: { format: "%d", date:"$txnDate" } }
          } 
      },
      { $group: 
          { _id : { isoday: "$isoDay", dday: "$dayDate" }, count: { "$sum" : 1 } }
      },
      { $project : { 
          isoDay_Final: "$_id.isoday"    
          } 
      },
      { $group: 
          { _id : "$isoDay_Final", count: { "$sum" : 1 } }
      },
      { $sort: { "_id": 1 } }
 ]) 

发布一些示例数据。出于某种原因,我认为我仅限于管道阶段的一个实例-你解放了我的思想,Shravya-谢谢