Mongodb query mongodb聚合不同计数
意识到这个话题已经被问过很多次了,但是这些建议并没有帮助我解决这个问题 以下查询试图使用ISODay确定给定工作日是否存在销售。因为查询将在月初运行,所以我需要知道该月发生了多少次特定的ISOdayMongodb 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
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-谢谢