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!

img

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 } }) %}

Let op:

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!

addtoset
unset
push
pull