Tutorial > MongoUpdates
Net als elke database heeft ook MongoDB de mogelijkheid om records te updaten. Vanwege de structuur van de records in de database zijn er meerdere vormen van updates mogelijk. Vanwege de mogelijkheid om grote hoeveelheden data op te slaan in de database is het echter niet wenselijk om ieder record op te halen en weer bewerkt retour te sturen. We beginnen met het ophalen van een of enkele records die moeten worden voorzien van een update.
Het doel van de onderstaande opdrachten is het bijwerken van gegevens in een MongoDB document, zonder het hele document op te hoeven halen en bewerkt retour te moeten sturen. Voor iedere actie wordt gebruik gemaakt van de aanroep {{ mongo.update }}
met per actie een ander commando. Deze commando's bestaan uit een dollarteken ($) en het commando. Let goed op waar welk commando gebruikt moet worden!
Om te beginnen halen we een record uit de database en die slaan we op in de variabele 'before'. We geven de zoekopdracht het filter 'naam = Wietse' mee en gebruiken het eerst gevonden record.
{% set before = mongo.get({ "naam": "Wietse"})[0] %}
Vanaf hier kunnen we het id
van het record altijd aanroepen met {{ before._id }}
. 'Before' is het object, '_id' de waarde van het id van het record.
Sub-object maken
mongo.update(string id, {"$set" : {sub-object : array/object sub-object}})
Maakt van een lege array een sub-object op het bestaande record. Het commando dat gebruikt wordt is '$set'.
{% do mongo.update(before._id, { siblings : [] } ) %}
{# Of voluit #}
{% do mongo.update(before._id, { "$set" : { siblings : [] } } ) %}
Sub-object verwijderen
mongo.update(string id, {"$unset" : {filter}})
Het sub-object dat voldoet aan het filter zal worden verwijderd. Het commando dat gebruikt wordt is '$unset'.
{% do mongo.update(before._id, { "$unset" : { score : 20 } }) %}
Element toevoegen
mongo.update(string id, {"$unset" : {array/object element}})
Voegt een element toe aan de siblings van het record. Het commando dat gebruikt wordt is '$addToSet'.
{% do mongo.update(before._id, {
"$addToSet" : { siblings : { naam: "Aukje" } }
}) %}
Element aanpassen
mongo.update({id : string id, "sub-object.field" : string value}, {sub-object.$.field : value})
Past een element binnen een sub-object aan met de waarde die opgegeven wordt. Hier wordt geen commando gebruikt, maar dit komt overeen met '$push' in de documentatie van MongoDB.
Om dit te laten werken moet het sub-object dat je wilt bijwerken een onderdeel zijn van je filter.
{% do mongo.update({ _id : before._id, "siblings.naam" : "Aukje" }, {
"siblings.$.leeftijd" : 25
}) %}
Zie ook de documentatie van MongoDB voor de volgende onderwerpen:
Let wel op het verschil tussen de syntax van MongoDB en nodum!