【发布时间】:2021-04-10 19:59:11
【问题描述】:
我有文件
[{
"id": "1",
"base": 23,
"dateValues": [{
"timestamp": "2021-02-15T13:13:17.611Z",
"value": 50
}, {
"timestamp": "2021-02-22T13:13:17.611Z",
"value": 50
}]
},
{
"id": "2",
"base": 256,
"dateValues": [{
"timestamp": "2021-02-01T13:13:17.611Z",
"value": 50
}, {
"timestamp": "2021-02-10T13:13:17.611Z",
"value": 50
}]
},
{
"id": "3",
"base": 256,
"dateValues": [{
"timestamp": "2021-02-03T13:13:17.611Z",
"value": 50
}, {
"timestamp": "2021-02-04T13:13:17.611Z",
"value": 50
}, {
"timestamp": "2021-02-10T13:13:17.611Z",
"value": 50
}]
},
{
"id": "4",
"base": 256,
"dateValues": [{
"timestamp": "2021-02-03T13:13:17.611Z",
"value": 50
}, {
"timestamp": "2021-02-08T13:13:17.611Z",
"value": 50
}]
}
]
现在我想比较所有对象的日期。我将尽可能简单地简化逻辑..
- 首先我想获取所有不同的日期集,因此这些日期将是
"2021-02-01"
"2021-02-03"
"2021-02-04"
"2021-02-08"
"2021-02-15"
"2021-02-22"
"2021-02-10"
- 现在我想循环上面的日期并将每个日期与每个对象 dateValues 进行比较
例如,如果我们取第一个日期“2021-02-01”,我希望每个对象(文档)只有一个日期
- 小于等于“2021-02-01”的人
- 其时间戳是最新的时间戳
- 如果没有找到 dateValue,那么我们就取基值
- 最后我们将对这些值求和
所以对于这个日期“2021-02-01” dateValues 将是
for id 1 no date value is there so in this case I need to take base value, which is 23
for id 2 we found date value so we will take its corresponding value, which is 50
for id 3 and 4 no date is matching so again we are taking its base value which 256 and 256
so final value comes for date "2021-02-01" is 23+50+256+256 = 585
日期 “2021-02-22”
的另一个示例for id 1 we found date "2021-02-22", value is 50
for id 2 we found date "2021-02-10" value is 50
for id 3 we found date "2021-02-10" value is 50
for id 4 we found date "2021-02-08" value is 50
Final value for date "2021-02-22" is 200
我们可以在 mongo db 聚合中执行此逻辑吗? 我只能得到不同的日期,但在那之后我失去了它。谁能帮我解决这个 mongodb 聚合?或者甚至可以在 mongodb 聚合中实现这个逻辑?
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework