mongodb находит самую старую дату из трех ключей в каждом документе - PullRequest
2 голосов
/ 13 апреля 2019

У меня есть схема документа, которая выглядит следующим образом:

{
    status: String,
    estimateDate: Date,
    lostDate: Date,
    soldDate: Date,
    assignedDate: Date
}

С этой схемой все три даты могут существовать, и ни одна из них не может существовать.Мне нужно сделать проверку всех трех, и если хотя бы одна существует, используйте самую старую дату, если ни одна не существует, используйте сегодняшнюю дату.Получив «возвращенную» дату, получите разницу в днях с другим ключом (assignDate).Я понял, как сделать то, что я хочу, с одной датой, но не могу понять, как увеличить ее, чтобы включить все три ключа.Ниже приведен рабочий код, который у меня есть для одного ключа.

В рамках этапа моего общего проекта $ project я делаю следующее:

days: {
    $cond: {
        if: {
            $not: ["$date1"]
        },
        then: {
            $floor: {
                $divide: [
                    {
                        $subtract: [new Date(), "$assignedDate"]
                    },
                    1000 * 60 * 60 * 24
                ]
            }
        },
        else: {
            $floor: {
                $divide: [
                    {
                        $subtract: [
                            "$estimateDate",
                             "$assignedDate"
                        ]
                    },
                    1000 * 60 * 60 * 24
                ]
            }
        }
    }
}

1 Ответ

1 голос
/ 13 апреля 2019

Вы можете использовать операторы $ min и $ ifNull , чтобы получить самую старую дату, указав new Date() в качестве значения по умолчанию, если какая-либо из этих дат не существует:

db.col.aggregate([
    {
        $project: {
            oldest: {
                $min: [
                    { $ifNull: [ "$lostDate", new Date() ] },
                    { $ifNull: [ "$soldDate", new Date() ] },
                    { $ifNull: [ "$assignedDate", new Date() ] },
                ]
            }
        }
    }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...