Есть ли способ сохранить тип даты как местное время в MongoDB?

#mongodb #mongodb-query

Вопрос:

Похоже, что все типы дат в базе данных Mongo сохраняются как время UTC. Есть ли возможность настроить на стороне сервера MongoDB, чтобы я мог изменить тип даты по умолчанию для отображения в качестве локального времени? Например, для отображения/сохранения в качестве времени CTC в БД? Спасибо,

Комментарии:

1. Я просто сохраняю все как UTC, а затем преобразую его в местное время, когда помещаю его в отчеты или поверхностные данные на своем веб-сайте. Вы можете конвертировать его при загрузке — у меня есть модуль на Python, который это делает … как вы загружаете свои данные в mongo?

2. Данные загружаются разработчиками Java по местному времени, как только они вводятся в базу данных, они автоматически сохраняются как время UTC. Я запускаю отчет, нужно отфильтровать его по местному времени, как мне выполнить преобразование только с помощью запроса Mongo DB? Например, я хочу получить данные за последние 5 дней, я могу использовать агрегатную функцию $match: { «CreateDate»: { $gte: новая дата(новая дата().setDate(новая дата().getDate()-5)), $lte: новая дата()}}}. Но на дисплее отображается время UTC, и я думаю, что диапазон времени также соответствует UTC, верно?

3. ваш объект даты должен выглядеть так: 2020-11-22T20:07:32.600 00:00, а 00:00-это то, что делает его UTC. Если даты вводятся по местному времени, это будет что-то вроде -08:00 (PT). Если javascript собирает данные как локальные, но не корректирует TZ в формате даты ISO, то на самом деле у вас другая проблема (извините), которую следует исправить в первую очередь. Насколько я понимаю, Монго не преобразует TZ для вас, он просто вводит то, что ему говорят …

4. Это не поддерживается. Сервер MongoDB работает только в UTC.

5. Возвращает ли ваш запрос с помощью new Date() правильных результатов?

Ответ №1:

MongoDB хранит дату и время как количество миллисекунд с момента эпохи. Информация о часовом поясе не хранится вместе с данными.

Значение, возвращаемое базой данных, будет выглядеть примерно так 1614847506286 .

То, как это отображается, полностью зависит от приложения.

Комментарии:

1. Если я выполняю запрос mongodb только для создания отчета без использования какого-либо другого кода, как преобразовать время UTC в местное время при выполнении запроса и как преобразовать время UTC в мое местное время для набора результатов?

2. Если вы сохраняете значения в MongoDB в виде типов даты/времени, при выполнении запроса преобразовывать их не потребуется. (т. е. количество миллисекунд с момента эпохи не зависит от часового пояса). Результирующий набор также будет содержать дату в виде целого числа, выбор часового пояса и преобразование этого целого числа в строку даты зависит от клиента.