MongoDB heeft een $inc
veldupdate-operator waarmee u een waarde met een bepaald bedrag kunt verhogen.
U kunt positieve en negatieve waarden gebruiken (d.w.z. om de waarde te verhogen of te verlagen).
Als het veld nog niet bestaat, wordt het gemaakt met de opgegeven waarde.
Voorbeeld
Stel dat we een verzameling hebben met de naam dogs
met het volgende document:
{ "_id" : 1, "name" : "Wag", "weight" : 10 }
Hier, het weight
veld bevat een waarde die kan worden verhoogd of verlaagd.
Verhogen
We kunnen de $inc
. gebruiken operator in combinatie met de update()
methode om het gewicht van deze hond te verhogen.
Zoals dit:
db.dogs.update(
{ _id: 1 },
{ $inc: { weight: 5 } }
)
Uitgang:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Dit vertelt ons dat één document is gematcht en gewijzigd.
Laten we de collectie nog eens bekijken:
db.dogs.find()
Resultaat:
{ "_id" : 1, "name" : "Wag", "weight" : 15 }
We kunnen zien dat het gewicht van de hond met 5 is toegenomen.
Verlagen
U kunt de waarde verlagen door een negatieve waarde te geven aan de $inc
telefoniste.
Zoals dit:
db.dogs.update(
{ _id: 1 },
{ $inc: { weight: -5 } }
)
Uitgang:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Bekijk de collectie:
db.dogs.find()
Resultaat:
{ "_id" : 1, "name" : "Wag", "weight" : 10 }
We kunnen zien dat het gewicht nu met 5 is verlaagd.
Een veld verhogen dat niet bestaat
Wanneer u een veld verhoogt dat niet in het document bestaat, wordt het veld toegevoegd en krijgt het de opgegeven waarde toegewezen.
Voorbeeld:
db.dogs.update(
{ _id: 1 },
{ $inc: { weight: 1, height: 30 } }
)
Uitgang:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Merk op dat we twee velden hebben bijgewerkt; het weight
veld en de height
veld (dat oorspronkelijk niet bestond).
Laten we het document nog eens controleren:
db.dogs.find()
Resultaat:
{ "_id" : 1, "name" : "Wag", "weight" : 11, "height" : 30 }
We kunnen zien dat het weight
veld is verhoogd met 1
, en een nieuwe height
veld is toegevoegd met de opgegeven waarde van 30
.