MongoDB har en $mul
fältuppdateringsoperator som låter dig multiplicera ett värde med ett specifikt belopp.
Om fältet inte redan finns skapas det och dess värde sätts till noll (0
) med samma numeriska typ som multiplikatorn.
Exempel
Anta att vi har en samling med följande dokument:
{ "_id" : 1, "bar" : 10 }
Vi kan använda $mul
operatorn i kombination med update()
metod för att öka bar
fältet.
Så här:
db.foo.update(
{ _id: 1 },
{ $mul: { bar: 2 } }
)
Utdata:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Detta talar om för oss att ett dokument matchades och modifierades.
Låt oss kolla in samlingen igen:
db.foo.find()
Resultat:
{ "_id" : 1, "bar" : 20 }
Vi kan se att beloppet har fördubblats till 20.
Multiplicera ett fält som inte finns
När du använder $mul
på ett fält som inte finns i dokumentet läggs fältet till och sätts till noll (0
) med samma numeriska typ som multiplikatorn.
Exempel:
db.foo.update(
{ _id: 1 },
{ $mul: { bar: 3, extra: 2 } }
)
Utdata:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Observera att vi uppdaterade två fält; bar
fältet och extra
fält (som inte fanns från början).
Låt oss kontrollera dokumentet igen:
db.foo.find()
Resultat:
{ "_id" : 1, "bar" : 60, "extra" : 0 }
Vi kan se att bar
fältet har multiplicerats med 3
, och en ny extra
fältet har lagts till och satt till 0
.
Blandade typer
Multiplikation med värden för blandade numeriska typer (32-bitars heltal, 64-bitars heltal, flytande) kan resultera i konvertering av numerisk typ.
Se MongoDB-dokumentationen för en förklaring.