у меня такие данные
"delivery": [{
"status": "Not Started",
"createdAt": {
"$date": "2020-12-21T03:50:33.877Z"
},
"updatedAt": {
"$date": "2020-12-21T03:50:33.877Z"
}
}, {
"status": "Accepted",
"updatedAt": {
"$date": "2020-12-21T03:51:20.915Z"
},
"createdAt": {
"$date": "2020-12-21T03:51:20.915Z"
}
}, {
"status": "Ongoing",
"updatedAt": {
"$date": "2020-12-21T03:52:40.087Z"
},
"createdAt": {
"$date": "2020-12-21T03:52:40.087Z"
}
}, {
"status": "Ended",
"updatedAt": {
"$date": "2020-12-21T03:52:40.087Z"
},
"createdAt": {
"$date": "2020-12-21T04:00:40.087Z"
}
Я хочу получить разницу во времени от «Не начато» до «Принято» и от «Продолжается» до «Завершено». У меня ошибка: не могу $вычесть массив из массива. Я ожидаю получить разницу между двумя разными массивами.
db.deliveries.aggregate([
{
$project:
{
"delivery.createdAt": 1,
"delivery.updatedAt": 1
}
},
{
$addFields: {
difference: {
$divide: [{$subtract: ["$delivery.updatedAt", "$delivery.createdAt"]}, 3600000]
}
}
},
])
Ожидаемый результат:
{
"status": "Not Started",
"createdAt": {
"$date": "2020-12-21T03:50:33.877Z"
},
"updatedAt": {
"$date": "2020-12-21T03:50:33.877Z"
}
}, {
"status": "Accepted",
"updatedAt": {
"$date": "2020-12-21T03:51:20.915Z"
},
"createdAt": {
"$date": "2020-12-21T03:51:20.915Z"
}
},
difference: 0.013066111111111112
{
"status": "Ongoing",
"updatedAt": {
"$date": "2020-12-21T03:52:40.087Z"
},
"createdAt": {
"$date": "2020-12-21T03:52:40.087Z"
}
}, {
"status": "Ended",
"updatedAt": {
"$date": "2020-12-21T03:52:40.087Z"
},
"createdAt": {
"$date": "2020-12-21T04:00:40.087Z"
},
difference: 0.08 //sample computation
Я хочу рассчитать разницу между Not Started (createdAt) и Accepted (updatedAt). И получите разницу между ** Текущим (создано в) и Завершено (обновлено в).
Вы можете $addFields и $cond узнать время начала и окончания. Затем вычислить разницу,
Вот игровая площадка Mongo Playground для справки.
Обновил решение. Не могли бы вы проверить, хорошо ли он выглядит сейчас? :)
Привет, что я имею в виду. от статуса: Не начато, рассчитайте разницу во времени до статуса: Принято.