我有以下MongoDB查询按日期和结果分组,并给出一个计数。如果数据在当天不存在,我希望查询也返回特定日期和结果的计数为0。如果没有结果,MongoDB聚合返回计数为0
例如,我有以下结果状态:成功和失败。如果21号没有失败我希望计数返回0结果:
{
"_id" : {
"month" : 1,
"day" : 21,
"year" : 2014,
"buildResult" : "FAILURE"
},
"count" : 0
}
我已经做了一个关系型数据库和日历表类似的东西,但我不知道如何处理这与MongoDB。这是可能的或者我应该在运行查询后以编程方式执行某些操作?
这里是在数据库中的文档(简体)的例子:
{
"_id" : ObjectId("52deab2fe4b0a491abb54108"),
"type" : "build",
"time" : ISODate("2014-01-21T17:15:27.471Z"),
"data" : {
"buildNumber" : 43,
"buildDuration" : 997308,
"buildResult" : "SUCCESS"
}
}
这里是我当前的查询:
db.builds.aggregate([
{ $match: { "data.buildResult" : { $ne : null} }},
{ $group: {
_id: {
month: { $month: "$time" },
day: { $dayOfMonth: "$time" },
year: { $year: "$time" },
buildResult: "$data.buildResult",
},
count: { $sum: 1}
} },
{ $sort: { "_id.year": 1, "_id.month": 1, "_id.day": 1} }
])
我不相信在任何可用范围之外建立范围仍然存在,即通常会存在的日期是1/2/2013,但在这种情况下并不是这样,所以您希望在那里有0。 – Sammaye
是否有可能添加类似日历集合的东西?我用关系数据库创建了一个日历表来做同样的事情。基本上将日历表与数据表结合起来以查找缺失的记录。 – JamesE
您可以添加一个映射器并将聚合映射到该日历表,这是一个合法的方法 – Sammaye