我正在努力为我的MongoDB数据库创建聚合查询。
数据库非常大(+ 10GB),因此即使在短时间窗口(数万个文档)中手动聚合也非常慢。
文档样本始终遵循以下结构:
{
"_id":ObjectId("568285c5693a7336bb16c817"),
"DetectTime":"2015-12-29T13:08:21Z",
"Node":[
{
"Type":["Flow","Statistical"],
"SW":["Nemea","HostStatsNemea"],
"Name":"cz.cesnet.nemea.hoststats"
}
],
"EventTime":"2015-12-29T13:07:05Z",
"Description":"Horizontal port scan",
"ConnCount":254,
"CeaseTime":"2015-12-29T13:07:46Z",
"Format":"IDEA0",
"Category":["Recon.Scanning"],
"ID":"924c76d4-7c4d-45d8-b1b1-3dc36cf47729",
"Source":[
{
"IP4":["192.168.0.254"],
"Proto":["tcp"]
}
],
"FlowCount":254,
"CreateTime":"2015-12-29T13:08:21Z"
}
对我而言,重要的是我要汇总的Category
和DetectTime
。使用DetectTime
我想为每个N
实现Category
分钟的聚合,并为每个聚合汇总FlowCount
。我真的很挣扎,因为DetectTime
不是日期而是字符串,因此我无法正常使用它。
我真的被困了,真的很感激任何帮助!
答案 0 :(得分:0)
您的问题是DetectTime
是string
而不是datetime
对象。我很确定你必须在你的逻辑中某处比较datetime
。要进行比较,您需要通过执行此操作将string
转换为datetime
对象
from datetime import datetime as dt
detectTime = dt.strptime("2015-12-29T13:08:21Z", "%Y-%m-%dT%H:%M:%SZ")
您可以对所有条目执行此操作并将其存储在MongoDB中。