manejar gte fechas datetostring convert mongodb

gte - ¿Cuál es la mejor manera de almacenar fechas en MongoDB?



mongodb format datetime (3)

Estoy empezando a aprender sobre MongoDB y espero migrar lentamente de MySQL.

En MySQL, hay dos tipos de datos diferentes: DATE (''0000-00-00'') y DATETIME (''0000-00-00 00:00:00'') . En MySQL, utilizo el tipo DATE , pero no estoy seguro de cómo transferirlos a MongoDB. En MongoDB, hay un objeto Date , que es comparable a DATETIME . Parece que sería más apropiado usar objetos Date , pero eso sería perder espacio, ya que horas, minutos, segundos no se utilizan. Por otro lado, el almacenamiento de fechas como cadenas parece incorrecto.

¿Hay un estándar de oro para almacenar fechas (''0000-00-00'') en MongoDB?


BSON (el formato de datos de almacenamiento utilizado por mongo de forma nativa) tiene un tipo de fecha dedicado UTC datetime que es un entero con signo de 64 bits (por lo tanto, 8 bytes) que denota milisegundos desde época de tiempo Unix. Hay muy pocas razones válidas por las que usaría cualquier otro tipo para almacenar fechas y marcas de tiempo.

Si está desesperado por guardar unos pocos bytes por fecha (de nuevo, con el relleno de mongo y el tamaño de bloque mínimo y todo esto solo vale la pena en casos muy raros) puede almacenar fechas como un blob binario de 3 bytes almacenándolo como un entero sin signo en formato YYYYMMDD, o un blob binario de 2 bytes que denota "días desde el 1 de enero del año X", donde X debe elegirse de manera apropiada ya que solo admite un rango de fechas que abarca 179 años.

EDITAR: Como la discusión a continuación demuestra, este es solo un enfoque viable en circunstancias muy raras. Básicamente; usa el tipo de fecha nativo de mongo;)


En realidad, estoy en el proceso de convertir una base de datos MongoDB donde las fechas se almacenan como tipos Date () adecuados para almacenarlas como cadenas en el formato yyyy-mm-dd . ¿Por qué, teniendo en cuenta que todos los que responden dicen que esta es una idea horrible? En pocas palabras, debido al dolor interminable que he estado sufriendo al tratar de trabajar con fechas en JavaScript, que no tiene un concepto (real) de zonas horarias. He estado almacenando fechas UTC en MongoDB, es decir, un objeto Date () con la fecha deseada y la hora configurada como UTC de medianoche, pero es inesperadamente complicado y propenso a errores obtener una fecha enviada por el usuario correctamente convertida a esa desde cualquier zona horaria en la que Por casualidad, he estado luchando por obtener mi código JavaScript "sea cual sea el huso horario local para UTC" para que funcione (y sí, estoy al tanto de Sugar.js y Moment.js) y he decidido que las cadenas simples como el buen viejo estándar MySQL yyyy-mm-dd es el camino a seguir, y analizaré los objetos Date () según sea necesario en tiempo de ejecución en el lado del cliente.

Por cierto, también estoy tratando de sincronizar esta base de datos MongoDB con una base de datos de FileMaker, que tampoco tiene ningún concepto de zonas horarias. Para mí, la simplicidad de simplemente no almacenar datos de tiempo, especialmente cuando no tiene sentido, como la medianoche de UTC, ayuda a garantizar un código con menos errores, incluso si tengo que analizar las fechas de las cadenas de vez en cuando.


Si realmente te importa guardar 4 bytes por campo (en caso de que tengas muchos campos DATE por documento) puedes almacenar fechas como campos int32 en el formulario 20110720 (nota MySQL DATE ocupa 3 bytes, por lo que el almacenamiento será mayor en cualquier caso). De lo contrario, será mejor que me quede con el tipo de fecha y hora estándar.