首先,状态代码(“200”,“404”或其他)和时间(“1000”,“2000”..)不确定,
我想计算每个状态代码的数字(5,6 ...)。
例如:{“200”:11},{“404”:11}或{“total”:22}
数据结构:
"_id" : "xxxxx"
"domain" : "www.test.com"
"status" : [
{"200" : [ {"1000" : 5}, {"2000": 6} ...]},
{"404" : [ {"1000" : 5}, {"2000": 6} ...]}
....
]
MongoDB中的任何奇妙方法? 谢谢你的帮助
答案 0 :(得分:2)
不要将数据(如日期)用作键。数据属于值。枚举HTTP状态代码 - 您知道所有可能性 - 因此您可以根据需要将它们用作键。从文档的外观来看,您将页面文档中页面请求的信息与数组中的请求一起存储。在文档中拥有一个无限的,不断增长的数组并不是一个好主意。我建议将数据重构为请求文档,并将地址非规范化为每个:
{
"_id" : ObjectId(...),
"status" : 404,
"date" : ISODate("2014-10-30T18:23:09.471Z"),
"domain" : "www.test.com"
}
然后您可以通过聚合
获取对test.com的404个请求总数db.requests.aggregate([
{ "$match" : { "domain" : "www.test.com" } },
{ "$group" : { "_id" : "$status", "count" : { "$sum" : 1 } } }
])
domain
上的索引,以加快速度。
答案 1 :(得分:0)
我认为你可以使用聚合框架来实现这样的目标。
检查一下: db.errors.aggregate([{$ unwind:“$ status”},{$ group:{_ id:“$ status”,total:{$ sum:1}}}])
它将呈现如下结果: ... “结果”:[ { “_ID” : { “500”:[ { “1000”:5 }, { “2000”:6 } ] }, “总数”:1 }, ...
“总计”字段包含您要查找的计数。
希望这有帮助。
问候!