Разница между двумя последовательными полями документов mongodb

#database #mongodb

Вопрос:

У меня есть коллекция временных рядов в mongodb. Что выглядит примерно так:

 { _id: 1, time: 2021-01-03T06:26:20.000 00:00 }
{ _id: 2, time: 2021-01-03T06:26:21.000 00:00 }
{ _id: 3, time: 2021-01-03T06:26:22.000 00:00 }
 

Я хочу собрать весь документ на основе поля времени, и все документы будут отсортированы по полю времени. И вывод должен выглядеть как (t3-t2) (t2-t1). Так что на этот вывод уйдет 2 секунды.

Для postgresql мы можем использовать функцию окна или соединения для вычисления. Как это рассчитать в mongodb?

Комментарии:

1. Почему нет t3 - t1 ? Должно быть то же самое.

2. Математически t3-t1 это правильно. Но в какой-то момент я хочу пропустить несколько строк. Для этого примера предположим, что я хочу пропустить _id: 3 . Так что в этом случае ответ будет t2-t1

Ответ №1:

Ты можешь воспользоваться этим:

 db.collection.aggregate([
   { $match: { _id: { $ne: 3 } } },
   { $group: { _id: null, max_time: { $max: "$time" }, min_time: { $min: "$time" } } },
   { $set: { difference: { $divide: [{ $subtract: ["$max_time", "$min_time"] }, 1000] } } }
])