Este artículo presenta 5 formas de devolver la porción de milisegundos de un objeto Date en MongoDB.
Datos de muestra
Supongamos que tenemos una colección llamada cats
con los siguientes documentos:
{ "_id" : 1, "name" : "Scratch", "born" : ISODate("2021-01-03T23:30:15.123Z") } { "_id" : 2, "name" : "Meow", "born" : ISODate("2019-12-08T04:00:20.112Z") } { "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:45:01.007Z") }
Los siguientes ejemplos muestran varias opciones para devolver la porción de milisegundos del born
campo de esos documentos.
El $millisecond
Operador
El $millisecond
El operador está diseñado específicamente para devolver un documento con la porción de milisegundos de una fecha dada.
Podemos ejecutar el siguiente código para devolver la porción de milisegundos del born
campo en el documento anterior.
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthMillisecond: { $millisecond: "$born" }
}
}
]
)
Resultado:
{ "birthMillisecond" : 123 } { "birthMillisecond" : 112 } { "birthMillisecond" : 7 }
El $millisecond
el operador también acepta una timezone
argumento.
Ver MongoDB $millisecond
para más información y ejemplos.
El $dateToString
Operador
El $dateToString
El operador convierte un objeto de fecha en una cadena de acuerdo con un formato especificado por el usuario. Por lo tanto, el usuario puede especificar que solo se devuelva la porción de milisegundos si es necesario.
Hay especificadores de formato para cada parte de la fecha. El %L
El especificador de formato devuelve la porción de milisegundos (3 dígitos, relleno con ceros).
Ejemplo:
db.cats.aggregate(
[
{
$project: {
_id: 0,
birthMillisecond: { $dateToString: { format: "%L", date: "$born" } }
}
}
]
)
Resultado:
{ "birthMillisecond" : "123" } { "birthMillisecond" : "112" } { "birthMillisecond" : "007" }
Ver MongoDB $dateToString
para más información y ejemplos.
El $dateToParts
Operador
El $dateToParts
El operador devuelve un documento que contiene las partes constituyentes de un valor de fecha BSON dado como propiedades individuales. Las propiedades devueltas son year
, month
, day
, hour
, minute
, second
y millisecond
.
Por lo tanto, podríamos usar $dateToParts
en una etapa de canalización, luego agregue otra etapa de canalización que extraiga el millisecond
parte.
Esto es lo que $dateToParts
devoluciones de nuestros tres documentos:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
}
]
).pretty()
Resultado:
{ "dateParts" : { "year" : 2021, "month" : 1, "day" : 3, "hour" : 23, "minute" : 30, "second" : 15, "millisecond" : 123 } } { "dateParts" : { "year" : 2019, "month" : 12, "day" : 8, "hour" : 4, "minute" : 0, "second" : 20, "millisecond" : 112 } } { "dateParts" : { "year" : 2020, "month" : 9, "day" : 24, "hour" : 10, "minute" : 45, "second" : 1, "millisecond" : 7 } }
Este resultado se puede pasar a la siguiente etapa de la canalización y, por lo tanto, podemos extraer solo el millisecond
campo en la siguiente etapa.
Esto es lo que sucede si agregamos otra proyección por solo el millisecond
campo:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
},
{
$project:
{
birthMillisecond: "$dateParts.millisecond"
}
}
]
)
Resultado:
{ "birthMillisecond" : 123 } { "birthMillisecond" : 112 } { "birthMillisecond" : 7 }
Entonces, siempre que use $dateToParts
en su tubería, tendrá acceso al millisecond
(y las otras partes de la fecha) en la siguiente etapa.
Ver MongoDB $dateToParts
para más información y ejemplos.
El forEach()
Método
Puedes usar cursor.forEach()
para iterar a través del cursor, usando un método de JavaScript como getMilliseconds()
o getUTCMilliseconds()
para devolver solo los milisegundos.
db.cats.find().forEach(
function(c) {
print(
c.born.getUTCMilliseconds()
);
}
);
Resultado:
123 112 7
El getUTCSeconds()
El método de JavaScript devuelve un número entero, entre 0 y 999, que representa la porción de milisegundos del objeto de fecha dado.
El getMilliseconds()
el método lo devuelve en la hora local.
También puede notar que las opciones anteriores devuelven un documento completo que contiene un par de nombre/valor, mientras que esta opción devuelve solo el valor real en milisegundos, y no el documento completo.
El map()
Método
El cursor.map()
El método aplica una función a cada documento visitado por el cursor y combina los valores en una matriz.
Ejemplo:
db.cats.find().map(
function(c) {
c = c.born.getUTCMilliseconds();
return c;
}
);
Resultado:
[ 123, 112, 7 ]