Convertir una cadena a la fecha en MongoDB

Bilal Shahid 20 junio 2023
  1. Crear tipos de datos de cadena o fecha
  2. Convertir una cadena a la fecha en MongoDB
  3. Utilice el operador toDate
  4. Utilice el operador convertir
  5. Utilice el operador dateFromString
  6. Usar el Operador set
  7. Usar Hora del reloj
Convertir una cadena a la fecha en MongoDB

MongoDB es una gran plataforma que se ha vuelto cada vez más popular. Entre las diversas funciones que ofrece, MongoDB también le permite convertir sus datos de un tipo a otro.

Esto puede parecer una característica compleja, pero es bastante simple de ejecutar.

Si está buscando una manera de convertir sus datos de cadena a la fecha, está en el lugar correcto.

Crear tipos de datos de cadena o fecha

Antes de profundizar en cómo funciona la conversión, es necesario explicar cómo se crean las cadenas y las fechas, para empezar. Idealmente, un usuario elige inicialmente el tipo de datos deseado.

Sin embargo, puede haber una instancia en la que desee cambiarlo más adelante. Independientemente, aquí hay algunas formas en que puede crear inicialmente un campo con el formato de fecha.

{
birth: new Date('Jun 23, 1912'),
}

Por lo tanto, la estructura general sería el nombre del campo seguido de dos puntos y luego el tipo de dato.

Convertir una cadena a la fecha en MongoDB

MongoDB le permite cambiar su tipo de datos de cadena a fecha. Es mucho más simple de lo que cabría esperar.

Todo lo que necesita hacer es agregar algunas líneas adicionales de código y listo.

Utilice el operador toDate

Entre los múltiples métodos que existen, el operador toDate es probablemente el que se usa con más frecuencia. Esto se debe a que es bastante fácil de recordar y simple de ejecutar.

Este operador convertirá el valor a la fecha si es posible.

Sin embargo, devuelve errores si no se puede cambiar a este formato. De la misma manera, si el valor que se va a convertir es nulo o falta, el operador devolverá nulo.

Es importante tener en cuenta que es posible que no pueda usar este método si su versión de MongoDB es anterior a MongoDB 4.0. Aquí hay una manera simple de usar el operador toDate de MongoDB.

db.collection.aggregate([
{ "$addFields": {
"created_at": {
"$toDate": "$created_at"
}
} }
])

Este código alterará los campos almacenados en el formato de fecha requerido. Como se especificó anteriormente, el operador devuelve errores o valores nulos en caso de errores o falta de datos.

Nota: Este código ha sido diseñado para funcionar dentro de una canalización agregada. Sin embargo, puede modificarse para usarse sin uno.

Utilice el operador convertir

Otro método con el que puedes convertir cadenas en fechas es el operador convertir. Esto funciona de manera similar al operador toDate siempre que convierta el valor en un formato de fecha.

El operador convertir es diferente porque se usa para muchas conversiones.

No se limita a las conversiones de cadena hasta la fecha. Por lo tanto, al utilizar el operador convertir, es necesario definir el tipo de datos en el que desea convertir el valor.

Esto a menudo se hace usando el operador “a” después de usar el operador “convertir”. Puede consultar el código a continuación para comprender mejor su uso.

db.collection.aggregate([
{ "$addFields": {
"created_at": {
"$convert": {
"input": "$created_at",
"to": "date"
}
}
} }
])

Este código funciona de forma idéntica al anterior para el operador toDate. Como puede ver, después de especificar el operador convertir, el operador a se usa para especificar que el valor se convertirá al formato de fecha.

Recuerde que este operador solo está disponible para MongoDB 4.0 y versiones posteriores.

Utilice el operador dateFromString

Si tiene una versión anterior de MongoDB, siempre puede usar el operador dateFromString para hacer su trabajo. Esto funcionará para todas las versiones de MongoDB 3.6 o posteriores, por lo que es posible que necesite una actualización para trabajar con este operador.

El operador dateFromString le permite convertir una cadena en un objeto de fecha. Además, tiene algunas características adicionales, como opciones para especificar el formato de fecha y la zona horaria.

Aquí hay una manera simple de usar este operador.

db.collection.aggregate([
{ "$addFields": {
"created_at": {
"$dateFromString": {
"dateString": "$created_at",
"format": "%m-%d-%Y"/* this option is only available in MongoDB 4.0. or newer versions*/
}
}
} }
])

Este código le permitirá realizar la conversión deseada. Además, incluso puede modificar el formato de la fecha utilizando el operador format si tiene la versión correcta de MongoDB.

Usar el Operador set

Si prefiere usar una versión anterior de MongoDB, aún puede obtener el resultado deseado usando el operador set. Está disponible en todas las versiones de MongoDB entre MongoDB 2.6 y MongoDB 3.1, incluidas ambas.

Es importante tener en cuenta que este operador no se usa únicamente para convertir cadenas en fechas. Por lo tanto, debe incluir algunos procesos manuales para realizar el trabajo.

Deberá iterar el cursor devuelto por los métodos find() utilizando el método forEach() o el método cursor next() para acceder a lo que se requiere. Debe convertir el campo deseado en un objeto ISODATE dentro de este ciclo.

Finalmente, actualizará el operador set para que se pueda actualizar el formato de la cadena. En el código siguiente, xyz es el campo que contiene la cadena, que debe convertirse a un formato de fecha.

var cursor = db.collection.find({"xyz": {"$exists": true, "$type": 2 }});
while (cursor.hasNext()) {
var doc = cursor.next();
db.collection.update(
{"_id" : doc._id},
{"$set" : {"xyz" : new ISODate(doc.xyz)}}
)
};

Usar Hora del reloj

Otro método que funciona en la mayoría de los casos utiliza ClockTime. Básicamente, utiliza la colección ClockTime junto con el método find() para convertir una cadena al formato de fecha.

Un ejemplo del uso se muestra en el siguiente código.

db.ClockTime.find().forEach(function(doc) {
doc.ClockInTime=new Date(doc.ClockInTime);
db.ClockTime.save(doc);
})

Esperamos que ahora pueda encontrar un método para convertir cadenas en fechas en MongoDB que funcione para usted.

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

Artículo relacionado - MongoDB Date