Как я могу сравнить два раза в запросе mongodb? - PullRequest
2 голосов
/ 28 мая 2020

У меня есть два поля timeIn и arrivalTime в моей коллекции mongodb. Поле timeIn представляет время, в которое должен прибыть пользователь, а поле arrivalTime представляет фактическое время прибытия.

timeIn:"2020-05-24T18:31:00.000Z",
arrivalTime:2020-05-27T02:36:37.558+00:00

Как я могу сравнить timeIn и arrivalTime, чтобы отметить тех, кто приходит через timeIn как «Поздно».

$project: {
    name: 1,
    isPresent: {
        $cond: {
            if: {
                $lte: [ISODate("$arrivalTime"), ISODate("$timeIn")]
            },
            then: true,
            else: false
        }
    }
}

1 Ответ

2 голосов
/ 28 мая 2020

Если вы храните даты в виде строки, вы можете сравнить две даты (как строки), предполагая, что вы убедитесь, что они всегда находятся в одном и том же формате и часовом поясе.

$project: {
    name: 1,
    isPresent: {
        $cond: {
            if: {
                $lte: ["$arrivalTime","$timeIn"]
            },
            then: true,
            else: false
        }
    }
}

С учетом сказанного это не рекомендуется я считаю, что «обеспечение» таких вещей - не лучший подход. Так что еще вы можете сделать?

  1. Сохраните даты как Date. это потребует от вас обновления кода и базы данных, но, на мой взгляд, это будет лучшим долгосрочным решением.
  2. Если вы используете Mon go версии 3.6+, вы можете использовать Mon go 's $ dateFromString
$project: {
    name: 1,
    isPresent: {
        $cond: {
            if: {
                $lte: [{$dateFromString: {dateString: "$arrivalTime"}}, 
                       {$dateFromString: {dateString: "$timeIn"}}]
            },
            then: true,
            else: false
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...