Вычесть время из массива в массив MongoDB

у меня такие данные

"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). И получите разницу между ** Текущим (создано в) и Завершено (обновлено в).

Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
0
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете $addFields и $cond узнать время начала и окончания. Затем вычислить разницу,

Вот игровая площадка Mongo Playground для справки.

Привет, что я имею в виду. от статуса: Не начато, рассчитайте разницу во времени до статуса: Принято.

Pinky Promise 21.12.2020 09:04

Обновил решение. Не могли бы вы проверить, хорошо ли он выглядит сейчас? :)

ray 21.12.2020 12:24

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