MongoDB + Java - 根据查询的存在更新或包含数组中元素的值

时间:2018-02-19 13:00:52

标签: java mongodb

我正在使用MongoDB和Java的Apache日志进行统计分析项目。 Apache日志就像:

Tue, 13 Feb 2018 11:39:26.081 ;; ProcessId = 28889 ;; IPRequest = 10.160.74.43 ;; IPLocal = 10.160.85.46 ;; SizeResponseBytes = 2968 ;; TimeResponse = 14213 ;; Protocol = HTTP/1.1 ;; Port = 80 ;; Method = GET ;; Url = /login/ ;; Query =  ;; HTTPstatus = 200 ;; BytesReceived = 479 ;; ByteSend = 3509 ;; Referer = - ;; ServerName = www.managercapture.com ;; UseCanonicalServerName = 10.160.85.46 ;; User-Agent = Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 ;; SessionID = -

这部分:

BytesReceived = 479 ;; ByteSend = 3509

是在HTTP请求中接收和发送的字节数据。

在Mongo,我有一个类似的集合:

{
    date: yyyy/MM/dd HH:00:00
    data: [
        {second: 1, byteSent: 100, bytesReceived: 200},
        {sedond: 44, byteSent: 322, bytesReceived: 150},
        ...
    ]
}

现在又来了一行{second: X, byteSent: 555, bytesReceived: 300}

我想知道我是否可以在一个查询中执行此操作:

  • 使用datedata.second搜索文档,例如13
  • 如果找到,则将相同秒的值相加,以便在一秒内获得总字节数据(在同一秒内可能有多个请求)。 (第二个1有以前的数据,所以总结:{second: 1, byteSent: 555+100, bytesReceived: 300+200}
  • 如果未找到,请将此文档添加到列表中。 (第二个3没有以前的数据,因此添加文档:{second: 3, byteSent:555, bytesReceived:300}。)

答案喜欢"这是不可能的,因为......"也欢迎,有参考等。

0 个答案:

没有答案