Запрос фреймворка агрегации MongoDB для суммирования разницы во времени

у нас есть такие события:

{
  "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 находился в состоянии Running в определенный день / неделю / месяц?

это вообще возможно?

Поскольку мы находимся на этапе проектирования, мы открыты для предложений по модификации схемы JSON. Что здесь важно, так это возможность вычислить сумму продолжительности событий.

Опубликуйте здесь то, что вы пробовали до сих пор?

Clement Amarnath 04.04.2018 11:19
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
1
56
1

Ответы 1

Вы можете найти разницу между двумя датами, используя $ вычесть и используя $ сумма из $ группа

Конвейер агрегации поставляется с большим количеством операторы трубопроводов, чтобы получить желаемый результат с помощью манипуляций, применяемых к нашим коллекциям.

Одна модификация, необходимая в вашем случае, - сохранить дату в формате ISODate как ISODate("2018-04-04T09:11:00.000Z"), чтобы вы могли использовать все арифметические операции, указанные в mongodb.

Machine1 was in state Running in a specific day/week/month?

Используйте $ матч в конвейере агрегации для фильтрации документов в вашей коллекции, которые соответствуют вашим критериям

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

Другие вопросы по теме