【发布时间】:2021-04-18 10:07:01
【问题描述】:
我有这种格式的 mongo 数据
[
{
_id:ObjectId("5f71890730a4421699b1fbff"),
timestamp: ISODate("2020-01-12T03:07:52Z"),
running_fig: "circle",
},
{
_id:ObjectId("5f718ac330a4421699b1fc15"),
timestamp: ISODate("2020-01-12T03:08:48Z"),
running_fig: "circle",
},
{
_id:ObjectId("5f718ac330a4421699b1fc16"),
timestamp: ISODate("2020-01-12T03:09:32Z"),
running_fig: "rombous",
},
{
_id:ObjectId("5f718ac330a4421699b1fc14"),
timestamp: ISODate("2020-01-12T03:10:11Z"),
running_fig: "triangle",
},
{
_id:ObjectId("5f718ac330a4421699b1fc13"),
timestamp: ISODate("2020-01-12T03:11:52Z"),
running_fig: "triange",
},
{
_id:ObjectId("5f718ac330a4421699b1fc12"),
timestamp: ISODate("2020-01-12T03:15:22Z"),
running_fig: "circle",
},
{
_id:ObjectId("5f718ac330a4421699b1fc1e"),
timestamp: ISODate("2020-01-12T03:20:52Z"),
running_fig: "circle",
},
]
** 现在我想根据运行图时间制作一个事件图表,我希望以我给出的以下表格查询结果**
[
{
running_fig:“circle”,
from: 2020-12-21T03: 07: 52Z,
to: 2020-12-21T03: 09: 48Z,
duration: 2 min.
},
{
running_fig:“rombous”,
from: 2020-12-21T03: 09: 48Z,
to: 2020-12-21T03: 10: 32Z,
duration: 1 min.
},
{
running_fig:“triangle”,
from: 2020-12-21T03: 10: 32Z,
to: 2020-12-21T03: 15: 22Z,
duration: 5 min.
},
{
running_fig:“circle”,
from: 2020-12-21T03: 15: 22Z,
to: 2020-12-21T03: 25: 52Z (current time),
duration: 10 min.
}
]
所以我想要这种格式的结果数据,这样我就可以相应地创建一个图表,在这个数据中我的图表 running_fig 圈 start_time 是自己的时间戳,它的 end_time 将是下一个 running_fig 时间戳 在我的情况下,下一个菱形即将到来,因此 running_fig 圆圈的持续时间为 (3:09 -3:07) = 2 分钟,它们组合成单个数据显示我的预期结果。 任何人请帮我实现这个查询,提前谢谢
【问题讨论】:
-
为什么第一圈的结尾是
2020-12-21T03:09:48Z?我看不出时间是从哪里来的。其他时间也一样。 -
@WernfriedDomscheit 感谢您在这种情况下的考虑,数据还在继续。当我的案例圈中的 running_fig 值更改为 Rombous 时,意味着在此持续时间圈之间的圈子的 start_time(3:07)和 Rombous 的 start_time(3:09)进入 running_fig,因此其持续时间为 3 分钟。同样适用于所有。
-
不清楚你的意思。请根据所需的输出提供准确的输入数据。
-
@WernfriedDomscheit 感谢您的回复。实际上,我的传感器在数据更改时将数据记录到 MongoDB,当任何参数更改时,我有大约 10 个参数要记录,以将所有数据记录到我的数据库中,这就是为什么我得到相同的 2020-12-21T03:09:48Z
-
我还是不明白你的逻辑。您很可能必须使用$reduce。当然它会包含表达式
{$last: "$$value."$timestamp"}
标签: node.js mongodb mongoose mongodb-query aggregation-framework