Convertir marca de tiempo en fecha en MongoDB

Mehvish Ashiq 30 enero 2023
  1. Convertir marca de tiempo en fecha en MongoDB
  2. Convertir la marca de tiempo en fecha cuando la marca de tiempo es de tipo número
  3. Convierta la marca de tiempo en fecha cuando la marca de tiempo es de tipo cadena
  4. Convertir la marca de tiempo en fecha cuando la marca de tiempo es de tipo objeto
Convertir marca de tiempo en fecha en MongoDB

Este tutorial demuestra cómo podemos convertir la marca de tiempo en fecha en MongoDB. También ilustra cómo contar las entradas para una fecha específica.

Convertir marca de tiempo en fecha en MongoDB

La conversión de marca de tiempo en fecha depende del tipo de marca de tiempo que hayamos guardado. ¿Es del tipo objeto, número o cadena?

Podemos verificar el tipo de campo usando el siguiente comando en el shell de mongo. En este tutorial, aprenderemos cómo convertir la marca de tiempo a la fecha si es de tipo número, cadena u objeto.

Compruebe el tipo de campo:

// MongoDB 5.0.8

> typeof db.collection_name.findOne().fieldName;

Convertir la marca de tiempo en fecha cuando la marca de tiempo es de tipo número

Código de ejemplo (para collection1):

// MongoDB 5.0.8

> db.collection1.insertMany([
    {"_id": 1, "datetime": new Date().getTime()}, //saves timestamp in milliseconds
    {"_id": 2, "datetime": new Date().getTime()},
    {"_id": 3, "datetime": new Date().getTime()},
    {"_id": 4, "datetime": new Date().getTime()},
    {"_id": 5, "datetime": new Date().getTime()}
]);

> db.collection1.find();

Producción :

{ "_id" : 1, "datetime" : 1655448286502 }
{ "_id" : 2, "datetime" : 1655448286502 }
{ "_id" : 3, "datetime" : 1655448286502 }
{ "_id" : 4, "datetime" : 1655448286502 }
{ "_id" : 5, "datetime" : 1655448286502 }

Compruebe el tipo de campo datetime:

// MongoDB 5.0.8

> typeof db.collection1.findOne().datetime;

Producción :

number

Una vez que la colección está lista y conocemos el tipo de campo, podemos usar el siguiente enfoque para convertir de marca de tiempo a fecha y contar las entradas por fecha.

Código de ejemplo (para collection1):

// MongoDB 5.0.8

> db.collection1.aggregate([
      {
          "$project": {
              "_id": { "$toDate": "$datetime" }
           }
      },
      {
          "$group": {
              "_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$_id" }},
              "count": { "$sum": 1 }
          }
      }
]);

Producción :

{ "_id" : "2022-06-17", "count" : 5 }

Aquí, usamos la etapa de agregación $project que toma los documentos de la colección especificada e indica la inclusión de los campos, la supresión del campo _id, la adición de nuevos campos y el restablecimiento de los valores de los campos existentes.

Dentro de la etapa $project, convertimos el valor del campo datetime a la fecha usando la agregación $toDate y lo guardamos en el campo _id, que luego se pasa a la etapa de agregación $group.

En esta etapa, usamos el operador de tubería de agregación $dateToString para convertir el objeto date especificado en una cadena de acuerdo con el formato especificado y guardarlo en el campo _id, que se usa más para agrupar los documentos.

El $dateToString toma timestamp, date o ObjectId que se transforma aún más teniendo en cuenta el formato especificado por el usuario, mientras que $sum devuelve la suma colectiva de los valores numéricos únicamente.

Finalmente, agrupamos los documentos por el elemento, que es _id aquí. Recuerde que el _id ahora contiene un valor de cadena porque convertimos la fecha especificada a una cadena por formato especificado por el usuario.

Convierta la marca de tiempo en fecha cuando la marca de tiempo es de tipo cadena

Código de ejemplo (para collection2):

// MongoDB 5.0.8

> db.collection2.insertMany([
    {"_id": 1, "datetime": "1655445247168"},
    {"_id": 2, "datetime": "1522838153324"},
    {"_id": 3, "datetime": "1513421466415"},
    {"_id": 4, "datetime": "1515488183153"},
    {"_id": 5, "datetime": "1521571234500"}
]);

> db.collection2.find();

Producción :

{ "_id" : 1, "datetime" : "1655445247168" }
{ "_id" : 2, "datetime" : "1522838153324" }
{ "_id" : 3, "datetime" : "1513421466415" }
{ "_id" : 4, "datetime" : "1515488183153" }
{ "_id" : 5, "datetime" : "1521571234500" }

Compruebe el tipo de campo datetime:

// MongoDB 5.0.8

> typeof db.collection2.findOne().datetime;

Producción :

string

En esta colección, tenemos la marca de tiempo en formato de cadena. Entonces, podemos usar la siguiente solución para convertirla de marca de tiempo a fecha y agruparlas según la fecha.

Código de ejemplo (para collection2):

// MongoDB 5.0.8

> db.collection2.aggregate([
      {
          "$project": {
              "_id": { "$toDate": { "$toLong": "$datetime" }}
          }
      },
      {
          "$group": {
              "_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$_id" } },
              "count": { "$sum": 1 }
          }
      }
]);

Producción :

{ "_id" : "2018-03-20", "count" : 1 }
{ "_id" : "2017-12-16", "count" : 1 }
{ "_id" : "2022-06-17", "count" : 1 }
{ "_id" : "2018-04-04", "count" : 1 }
{ "_id" : "2018-01-09", "count" : 1 }

Este código es el mismo que el ejemplo anterior excepto por una diferencia. Aquí, estamos usando $toLong para convertir el campo datetime de cadena a tipo de número primero, y luego usamos ese valor convertido para transformar a la fecha usando $toDate.

Convertir la marca de tiempo en fecha cuando la marca de tiempo es de tipo objeto

Código de ejemplo (para collection3):

// MongoDB 5.0.8

> db.collection3.insertMany([
    {"_id":1, "datetime": new Timestamp()},
    {"_id":2, "datetime": new Timestamp()},
    {"_id":3, "datetime": new Timestamp()},
    {"_id":4, "datetime": new Timestamp()},
    {"_id":5, "datetime": new Timestamp()}
]);

> db.collection3.find();

Producción :

{ "_id" : 1, "datetime" : Timestamp(1655448393, 1) }
{ "_id" : 2, "datetime" : Timestamp(1655448393, 2) }
{ "_id" : 3, "datetime" : Timestamp(1655448393, 3) }
{ "_id" : 4, "datetime" : Timestamp(1655448393, 4) }
{ "_id" : 5, "datetime" : Timestamp(1655448393, 5) }

Compruebe el tipo de campo datetime:

// MongoDB 5.0.8

> typeof db.collection3.findOne().datetime;

Producción :

object

Esta vez podemos usar la siguiente solución para convertir la marca de tiempo a la fecha y contar las entradas por fecha.

Código de ejemplo (para collection3):

// MongoDB 5.0.8

> db.collection3.aggregate([
      {
          "$project": { "_id": "$datetime" }
      },
      {
          "$group": {
              "_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$_id" } },
              "count": { "$sum": 1 }
          }
      }
]);

Producción :

{ "_id" : "2022-06-17", "count" : 5 }
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Artículo relacionado - MongoDB Date