早上好,我很难在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,
}
],
}
答案 0 :(得分:0)
好的,所以我设法回答了自己的问题:需要使用$ unwind运算符来拆分“金额”,然后可以将字段添加到每个记录(持续时间),在我的情况下,我希望持续时间以分钟为单位。之后,我再次将所有内容分组
{
"$unwind" : { "path" : "$amounts" }
},
{
"$addFields" : {
"duration" : { "$divide" : [ { "$subtract" : [
"$enddate", "$startdate" ]}, 60000.0 ] }
}
},