Convertir marca de tiempo en fecha en MongoDB
- Convertir marca de tiempo en fecha en MongoDB
- Convertir la marca de tiempo en fecha cuando la marca de tiempo es de tipo número
- Convierta la marca de tiempo en fecha cuando la marca de tiempo es de tipo cadena
- Convertir la marca de tiempo en fecha cuando la marca de tiempo es de tipo objeto
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 }