#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] } } }
])