MongoDB按时间窗口聚合

时间:2016-02-01 13:03:08

标签: python mongodb mongodb-query pymongo

我正在努力为我的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"
}

对我而言,重要的是我要汇总的CategoryDetectTime。使用DetectTime我想为每个N实现Category分钟的聚合,并为每个聚合汇总FlowCount。我真的很挣扎,因为DetectTime不是日期而是字符串,因此我无法正常使用它。

我真的被困了,真的很感激任何帮助!

1 个答案:

答案 0 :(得分:0)

您的问题是DetectTimestring而不是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中。