【发布时间】:2018-08-22 01:37:10
【问题描述】:
意识到这个话题已经被问过很多次了 - 但这些建议并没有帮助我解决这个问题。
以下查询尝试使用 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 的 count 为“3”。目前 count 正在报告销售事件的数量发生在组组合中
【问题讨论】:
-
发布一些示例数据。
标签: mongodb-query aggregation-framework