Каков наилучший способ хранения дат в MongoDB?

Я только начинаю узнавать о MongoDB и надеяться медленно перейти от MySQL.

В MySQL существуют два разных типа данных: DATE ('0000-00-00') и DATETIME ('0000-00-00 00:00:00') . В моей MySQL я использую тип DATE , но я не уверен, как перенести их в MongoDB. В MongoDB существует объект Date , который сопоставим с DATETIME . Кажется, было бы наиболее целесообразно использовать объекты Date , но это будет тратить пространство, так как часы, min, sec не используются. С другой стороны, хранение дат в виде строк кажется неправильным.

Есть ли золотой стандарт для хранения дат ('0000-00-00') в MongoDB?

BSON (формат данных хранения, используемый mongo изначально) имеет выделенный тип даты UTC datetime, который представляет собой 64-битное (так, 8 байт) целое число, обозначающее миллисекунды с момента времени Unix. Существует очень мало веских причин, по которым вы бы использовали любой другой тип для хранения дат и временных меток.

Если вы отчаянно пытаетесь сохранить несколько байт за дату (опять же, с добавлением магна и минимальным размером блока, и все это только стоит проблем в очень редких случаях), вы можете хранить даты в виде 3-байтового двоичного блока, сохраняя его как беззнаковое целое в формате YYYYMMDD или двухбайтный двоичный код, обозначающий «дни с 1 января года X», где X должен быть выбран соответствующим образом, поскольку это поддерживает только диапазон дат, охватывающий 179 лет.

EDIT: Как видно из приведенного ниже обсуждения, это очень жизнеспособный подход в очень редких случаях. В основном; использовать родной тип даты mongo;)

Я фактически перерабатываю базу данных MongoDB, где даты хранятся как соответствующие типы Date (), вместо этого сохраняют их как строки в форме yyyy-mm-dd . Почему, учитывая, что каждый другой ответчик говорит, что это ужасная идея? Проще говоря, из-за бесконечной боли, которую я испытывал, пытаясь работать с датами в JavaScript, которая не имеет (реальной) концепции часовых поясов. Я сохранял даты UTC в MongoDB, то есть объект Date () с моей желаемой датой и временем, установленным в качестве полуночного UTC, но это неожиданно сложно и подвержено ошибкам, чтобы получить датированную пользователем дату, правильно преобразованную в это из любого часового пояса. случается, в. Я изо всех сил пытаюсь заставить код JavaScript «любой локальный часовой пояс для UTC» работать (и да, я знаю Sugar.js и Moment.js), и я решил, что простые строки, такие как хороший старый стандарт MySQL yyyy-mm-dd – это путь, и я буду анализировать объекты Date () по мере необходимости во время выполнения на стороне клиента.

Кстати, я также пытаюсь синхронизировать эту базу данных MongoDB с базой данных FileMaker, которая также не имеет понятия о часовых поясах. Для меня простота просто не хранить данные времени, особенно когда это бессмысленно, как полутоновая UTC, помогает обеспечить код с меньшей ошибкой, даже если мне приходится разбираться со строковыми датами сейчас и потом.

Если вы действительно заботитесь о сохранении 4 байта на поле (в случае, если у вас много полей DATE каждого документа), вы можете хранить даты как int32 поля в форме 20110720 (обратите внимание, что MySQL DATE занимает 3 байта, поэтому в любом случае хранилище будет больше). В противном случае мне лучше придерживаться стандартного типа даты и времени.

  • MongoDB SELECT COUNT GROUP BY
  • Возвращать только согласованные элементы субдокумента внутри вложенного массива
  • Использование map / reduce для отображения свойств в коллекции
  • Разница между count () и find (). Count () в MongoDB
  • mongodb / mongoose findMany - найти все документы с идентификаторами, перечисленными в массиве
  • Создание объекта BSON из строки JSON
  • Структура агрегации Mongodb: используется ли индекс использования группы?
  • Групповой результат на 15 минут времени в MongoDb
  • Обновление вложенных массивов в mongodb
  • Найти в двойном вложенном массиве MongoDB
  • MongoDB GridFs с C #, как хранить файлы, такие как изображения?
  • Interesting Posts

    Алгоритм обнаружения столкновений в кольцевом сегменте?

    Выяснение, какие каталоги используют наибольшее пространство на окнах

    Как реализовать mldivide от Matlab (так называемый оператор обратной косой черты) \ “)

    Как сделать 2 сопоставимых метода только в одном classе?

    Темы и записи файлов

    Как определить номер недели определенной даты?

    Как подмножество кадра данных в фактор и повторить график для каждого подмножества?

    Как заставить обновление favicon?

    API Office365 – администратор, получающий доступ к событиям календаря других пользователей / комнат

    Как измерить скорость передачи данных между моим внутренним жестким диском SATA и внешним USB-накопителем?

    Разница указателей / адресов

    Пересечение нескольких списков с помощью IEnumerable.Intersect ()

    Mac OS X: команда не работает

    Что такое хороший уникальный идентификатор ПК?

    Проблемы с Sqlite с HTC Desire HD

    Давайте будем гением компьютера.