Definición
$trunc$trunctrunca un número a un entero o a un lugar decimal especificado.
Sintaxis
El operador $trunc tiene la siguiente sintaxis:
{ $trunc : [ <number>, <place> ] }
Campo | Tipo | Descripción |
|---|---|---|
| Número | |
| entero | Opcional Puede ser cualquier expresión válida que resuelva un número entero entre -20 y 100, exclusivo. Por ejemplo,
|
La expresión <number> puede ser cualquier expresión válida siempre que se resuelva en un número. Para obtener más información sobre las expresiones, consulte Expresiones.
Comportamiento
$trunc no redondea los datos truncados. Para redondear los valores de entrada a un lugar específico, usa la expresión $round.
Tipo de datos devueltos
El tipo de datos devuelto coincide con el tipo de datos de la expresión o valor ingresados.
Precisión de truncamiento con números de punto flotante
Si imprime un número de punto flotante de doble precisión 4.56 con 20 dígitos después del separador decimal, verá 4.55999999999999960920, que es ligeramente menor que 4.56 y se trunca a 4.55.
MongoDB utiliza el estándar IEEE 754 para operaciones de coma flotante, y el comportamiento es coherente con dicho estándar.
Si necesita un número de punto flotante para una aplicación que requiere alta precisión, considere un Decimal128 valor. Para más detalles, consulte BSON.Decimal.128
Si necesitas almacenar un valor en moneda, considera un número entero utilizando la unidad monetaria de denominación más baja. Por ejemplo, utilice un número entero con céntimos o centavos en lugar de un número de punto flotante.
null; NaN, y +/- Infinity
Si el argumento se resuelve a un valor de
nullo se refiere a un campo que falta,$truncdevuelvenull.Si el argumento se resuelve
NaNen,$truncNaNdevuelve.Si el argumento se resuelve en infinito negativo o positivo, devuelve infinito negativo o positivo
$truncrespectivamente.
Ejemplo | Resultados |
|---|---|
|
|
|
|
|
|
|
|
Ejemplo
Cree una colección llamada samples con los siguientes documentos:
db.samples.insertMany( [ { _id: 1, value: 19.25 }, { _id: 2, value: 28.73 }, { _id: 3, value: 34.32 }, { _id: 4, value: -45.34 } ] )
La siguiente agregación devuelve
valuetruncado al primer decimal:db.samples.aggregate([ { $project: { truncatedValue: { $trunc: [ "$value", 1 ] } } } ]) La operación devuelve los siguientes resultados:
{ "_id" : 1, "truncatedValue" : 19.2 } { "_id" : 2, "truncatedValue" : 28.7 } { "_id" : 3, "truncatedValue" : 34.3 } { "_id" : 4, "truncatedValue" : -45.3 } La siguiente agregación devuelve
valuetruncado a la primera posición:db.samples.aggregate([ { $project: { truncatedValue: { $trunc: [ "$value", -1 ] } } } ]) La operación devuelve los siguientes resultados:
{ "_id" : 1, "truncatedValue" : 10 } { "_id" : 2, "truncatedValue" : 20 } { "_id" : 3, "truncatedValue" : 30 } { "_id" : 4, "truncatedValue" : -40 } La siguiente agregación devuelve``valor`` truncado al número entero completo:
db.samples.aggregate([ { $project: { truncatedValue: { $trunc: [ "$value", 0 ] } } } ]) La operación devuelve los siguientes resultados:
{ "_id" : 1, "truncatedValue" : 19 } { "_id" : 2, "truncatedValue" : 28 } { "_id" : 3, "truncatedValue" : 34 } { "_id" : 4, "truncatedValue" : -45 }