Desde MongoDB 4.0, puede usar $toLong
operador de canalización de agregación para convertir un valor en largo.
La mayoría de los tipos se pueden convertir en largos, pero el ObjectId no.
Cuando convierte un valor de Fecha en largo, $toLong
devuelve el número de milisegundos desde la época que corresponde al valor de la fecha.
Cuando convierte un valor booleano en largo, si el valor booleano es true
, entonces el largo es 1
. Si el booleano es false
, entonces el largo es 0
.
Ejemplo
Supongamos que tenemos una colección llamada types
y contiene los siguientes documentos:
{ "_id" : ObjectId("601340eac8eb4369cf6ad9db"), "double" : 123.75, "string" : "123", "boolean" : true, "date" : ISODate("2020-12-31T23:30:15.123Z"), "integer" : 123, "long" : NumberLong(123), "decimal" : NumberDecimal("123.75") }
Podemos usar el $toLong
operador para convertir esos campos (excepto el _id
campo) a un largo. Si la entrada ya es larga, simplemente devuelve la longitud.
db.types.aggregate(
[
{
$project:
{
_id: 0,
double: { $toLong: "$double" },
string: { $toLong: "$string" },
boolean: { $toLong: "$boolean" },
date: { $toLong: "$date" },
integer: { $toLong: "$integer" },
long: { $toLong: "$long" },
decimal: { $toLong: "$decimal" }
}
}
]
).pretty()
Resultado:
{ "double" : NumberLong(123), "string" : NumberLong(123), "boolean" : NumberLong(1), "date" : NumberLong("1609457415123"), "integer" : NumberLong(123), "long" : NumberLong(123), "decimal" : NumberLong(123) }
Errores
Si encuentra errores, intente usar $convert
operador en lugar de $toLong
. El $convert
operador le permite manejar errores sin afectar toda la operación de agregación.
El $toLong
operador es el equivalente de usar el $convert
operador para convertir un valor en largo.
Aquí hay un ejemplo del uso de $convert
para intentar convertir un ObjectId en un largo (lo que da como resultado un error):
db.types.aggregate(
[
{
$project:
{
_id: 0,
result:
{
$convert: {
input: "$_id",
to: "long",
onError: "An error occurred",
onNull: "Input was null or empty"
}
}
}
}
]
)
Resultado:
{ "result" : "An error occurred" }
Usando $convert
nos permitió especificar el mensaje de error que se usaría cuando ocurriera el error y no detuvo toda la operación de agregación.
Ver MongoDB $convert
para más ejemplos.