MongoDB tiene un $mul
operador de actualización de campo que le permite multiplicar un valor por una cantidad específica.
Si el campo aún no existe, se crea y su valor se establece en cero (0
) utilizando el mismo tipo numérico que el multiplicador.
Ejemplo
Supongamos que tenemos una colección con el siguiente documento:
{ "_id" : 1, "bar" : 10 }
Podemos usar el $mul
operador junto con update()
método para incrementar la bar
campo.
Así:
db.foo.update(
{ _id: 1 },
{ $mul: { bar: 2 } }
)
Salida:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Esto nos dice que un documento fue emparejado y modificado.
Revisemos la colección nuevamente:
db.foo.find()
Resultado:
{ "_id" : 1, "bar" : 20 }
Podemos ver que la cantidad se ha duplicado a 20.
Multiplicar un campo que no existe
Cuando usas $mul
en un campo que no existe en el documento, el campo se agrega y se establece en cero (0
) utilizando el mismo tipo numérico que el multiplicador.
Ejemplo:
db.foo.update(
{ _id: 1 },
{ $mul: { bar: 3, extra: 2 } }
)
Salida:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Observe que actualizamos dos campos; la bar
campo y el extra
campo (que originalmente no existía).
Revisemos el documento nuevamente:
db.foo.find()
Resultado:
{ "_id" : 1, "bar" : 60, "extra" : 0 }
Podemos ver que la bar
el campo ha sido multiplicado por 3
, y un nuevo extra
el campo se agregó y se estableció en 0
.
Tipos mixtos
La multiplicación con valores de tipos numéricos mixtos (entero de 32 bits, entero de 64 bits, flotante) puede dar como resultado una conversión de tipo numérico.
Consulte la documentación de MongoDB para obtener una explicación.