MongoDB聚合框架查询和时差

时间:2018-04-04 07:20:16

标签: json mongodb database-design aggregation-framework

我们有这样的事件:

{
  "dateStart": "2018-04-04T08:50:42.389Z",
  "machine": "Machine1",
  "state": "Running"
},
{
  "dateStart": "2018-04-04T09:10:00.389Z",
  "machine": "Machine1",
  "state": "Pause"
},
{
  "dateStart": "2018-04-04T09:11:00.000Z",
  "machine": "Machine1",
  "state": "Running"
},

什么是MongoDB查询,用于计算Machine1处于特定日期/周/月运行状态的时间?

甚至可能吗?

由于我们处于设计阶段,因此我们对修改JSON模式持开放态度。这里重要的是能够计算事件的持续时间总和。

1 个答案:

答案 0 :(得分:0)

您可以使用$subtract并使用$sum$group找到两个日期之间的差异

Aggregation pipeline带来了很多pipeline operators,可以通过对我们的集合进行操作来获得所需的结果。

您需要进行一项修改,将日期以ISODate格式存储为ISODate("2018-04-04T09:11:00.000Z"),以便您可以使用mongodb中提供的所有算术运算。

  

Machine1处于特定日/周/月的状态?

在汇总管道中使用$match来过滤集合中符合条件的文档

db.collection_name.aggregate([{$match:{machine:"Machine1", state:"Running"}}])