Мой подход заключается в создании двух коллекций (или одной коллекции и агрегации).
Первая коллекция содержит только необработанные данные датчика, я предполагаю, что они имеют только значение метки времени:
db.collection.insertMany([
{ sensor_name: "sensor 1", temp_value: 30.2, timestamp: new Date("2020-02-22T15:52:21.639Z") },
{ sensor_name: "sensor 1", temp_value: 31.2, timestamp: new Date("2020-02-22T15:52:23.639Z") },
{ sensor_name: "sensor 1", temp_value: 32.2, timestamp: new Date("2020-02-22T15:52:25.639Z") },
{ sensor_name: "sensor 1", temp_value: 32.2, timestamp: new Date("2020-02-22T15:52:27.639Z") },
{ sensor_name: "sensor 1", temp_value: 32.2, timestamp: new Date("2020-02-22T15:52:29.639Z") },
{ sensor_name: "sensor 3", temp_value: 12.2, timestamp: new Date("2020-02-22T15:52:00.639Z") }
])
Затем вы можете агрегировать значения:
db.collection.aggregate([
{ $sort: { timestamp: 1 } },
{
$group: {
_id: "$sensor_name",
temp_value: { $last: "$temp_value" },
start_timestamp: { $first: "$timestamp" },
count: { $sum: 1 },
end_timestamp: { $last: "$timestamp" },
min_temp: { $min: "$temp_value" },
max_temp: { $max: "$temp_value" },
}
}
])
Если вам нужно сохранить результат в коллекции, добавьте { $merge: { into: "temperatures" } }
к конвейеру агрегации.