MongoDB a un $mul
opérateur de mise à jour de champ qui permet de multiplier une valeur par un montant spécifique.
Si le champ n'existe pas déjà, il est créé et sa valeur est mise à zéro (0
) en utilisant le même type numérique que le multiplicateur.
Exemple
Supposons que nous ayons une collection avec le document suivant :
{ "_id" : 1, "bar" : 10 }
Nous pouvons utiliser le $mul
opérateur en conjonction avec le update()
méthode pour incrémenter la bar
champ.
Comme ceci :
db.foo.update(
{ _id: 1 },
{ $mul: { bar: 2 } }
)
Sortie :
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Cela nous indique qu'un document a été mis en correspondance et modifié.
Vérifions à nouveau la collection :
db.foo.find()
Résultat :
{ "_id" : 1, "bar" : 20 }
Nous pouvons voir que le montant a doublé pour atteindre 20.
Multiplier un champ qui n'existe pas
Lorsque vous utilisez $mul
sur un champ qui n'existe pas dans le document, le champ est ajouté et mis à zéro (0
) en utilisant le même type numérique que le multiplicateur.
Exemple :
db.foo.update(
{ _id: 1 },
{ $mul: { bar: 3, extra: 2 } }
)
Sortie :
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Notez que nous avons mis à jour deux champs ; le bar
champ et le extra
champ (qui n'existait pas à l'origine).
Vérifions à nouveau le document :
db.foo.find()
Résultat :
{ "_id" : 1, "bar" : 60, "extra" : 0 }
Nous pouvons voir que la bar
le champ a été multiplié par 3
, et un nouveau extra
le champ a été ajouté et mis à 0
.
Types mixtes
La multiplication avec des valeurs de types numériques mixtes (entier 32 bits, entier 64 bits, flottant) peut entraîner la conversion du type numérique.
Voir la documentation MongoDB pour une explication.