Mongo Aggregation获取数组对象的值之间的差异

时间:2019-02-11 18:39:51

标签: arrays mongodb aggregation-framework

早上好,我很难在mongodb中使用聚合来获取数组中两个值之间的日期差,我的文档结构如下:

[[2, 7, 3, 6], [3, 3, 4, 4], [6, 9, 5, 3], [4, 2, 1, 7]]
[[2, 7, 3, 6, -1], [3, 3, 4, 4, -1], [6, 9, 5, 3, -1], [4, 2, 1, 7, -1]]
[[2, 7, 3, 6, -1, 2, -5], [3, 3, 4, 4, -1, 2, -5], [6, 9, 5, 3, -1, 2, -5], [4, 2, 1, 7, -1, 2, -5]]

“金额”条目的数量不是固定的,因此可以是1或50等。

对于每个文档,我想得到“结束日期”和“开始日期”之间的差异(又称持续时间),我想对持续时间求和(称为总持续时间)。我可以进行总的“金额”而不会出现问题,但是获取持续时间会给我错误““从数组中减去$ atract aarray”,我的汇总如下所示:

{
    "_id" : ObjectId("5c591420a890362dec70fcf4"), 
    "tracetag" : "T00005", 
    "amounts" : [
        {
            "_id" : ObjectId("5c5915bea890362dec71015a"), 
            "startdate" : ISODate("2019-02-15T04:49:02.000+0000"), 
            "enddate" : ISODate("2019-02-15T04:50:05.000+0000"), 
            "amount" : 18.975946800811833, 
        }, 
        {
            "_id" : ObjectId("5c5915bea890362dec71015b"), 
            "startdate" : ISODate("2019-02-16T04:49:02.000+0000"), 
            "enddate" : ISODate("2019-02-16T04:51:52.000+0000"), 
            "amount" : 3.5755730555836203, 
        }, 
        {
            "_id" : ObjectId("5c5915bea890362dec71015c"), 
            "startdate" : ISODate("2019-02-17T04:49:02.000+0000"), 
            "enddate" : ISODate("2019-02-17T04:50:04.000+0000"), 
            "amount" : 2.3937573313380383, 
        }
    ], 
}

1 个答案:

答案 0 :(得分:0)

好的,所以我设法回答了自己的问题:需要使用$ unwind运算符来拆分“金额”,然后可以将字段添加到每个记录(持续时间),在我的情况下,我希望持续时间以分钟为单位。之后,我再次将所有内容分组

{
      "$unwind" : { "path" : "$amounts" }
    },
    {
      "$addFields" : {
          "duration" : { "$divide" : [ { "$subtract" : [ 
"$enddate", "$startdate" ]}, 60000.0 ] }
      }
    },