MongoDB is een NoSQL-database die een flexibele, documentgerichte aanpak gebruikt om data op te slaan in een JSON-achtig document, georganiseerd in collecties. Kort gezegd betekent dit dat je data in MongoDB wordt opgeslagen in een formaat dat sterk op JSON lijkt. Dat is makkelijk te lezen, eenvoudig te koppelen aan code en goed schaalbaar. MongoDB is modern en volgt een andere aanpak dan relationele databases. Relationele databases slaan data op met rijen in tabellen. Dat heeft voordelen, maar een grote uitdaging is het aanmaken van relaties met extra tabellen. MongoDB lost dit op met een flexibele schema-aanpak waarbij data in collecties wordt opgeslagen en niet in tabellen. Hierdoor kan data die bij een object hoort, samen met dat object worden opgeslagen. In deze tutorial bekijken we zeven concepten die je als beginner moet kennen wanneer je met MongoDB werkt. Laten we beginnen.
NoSQL en documentdatabases begrijpen
Als mensen aan databases denken, denken ze vaak aan SQL, dat data opslaat met rijen, tabellen en relaties. Dat werkt prima voor veel toepassingen, zeker als de data gestructureerd is. Maar het kan beperkend aanvoelen wanneer de data niet netjes in een tabelstructuur past.
Daar komt NoSQL om de hoek kijken. NoSQL betekent simpelweg “not only SQL”. Het omvat een familie van databases die afstapt van het rigide tabelmodel en meer flexibiliteit biedt. In plaats van al je data te dwingen in vooraf gedefinieerde kolommen, kun je die structureren op een manier die past bij hoe je applicatie werkelijk werkt.
MongoDB is een documentdatabase, een van de populairste typen NoSQL-databases. In plaats van rijen en tabellen wordt data opgeslagen als documenten in collecties. Elk document lijkt sterk op JSON, met sleutel-waardeparen, arrays en zelfs geneste objecten. Hierdoor kun je real-world data heel natuurlijk modelleren. Een goed voorbeeld is een gebruikersprofiel met adressen en voorkeuren in één record, zonder dat je het over meerdere tabellen hoeft te verspreiden. Laten we kijken hoe zo’n gebruikersprofiel eruitziet in één record in MongoDB.
{"_id":"u123","name":"Moses Anu","email":"[email protected]","addresses":[{"type":"home","city":"Abuja"},{"type":"work","city":"Lagos"}],"preferences":{"language":"English","theme":"dark"}}Mogelijk gemaakt door
Basis van de MongoDB-architectuur
Om effectief met MongoDB te werken, moet je begrijpen hoe data in een MongoDB-database is georganiseerd. In tegenstelling tot SQL-databases, waar data is gestructureerd in tabellen en rijen, gebruikt MongoDB collecties en documenten.
Database: Zie dit als de container voor alles. Net zoals je meerdere databases in MySQL kunt hebben, biedt MongoDB ook de flexibiliteit om meerdere databases voor verschillende projecten of applicaties te gebruiken.
Collectie: Binnen elke database heb je collecties. Zie een collectie als een tabel met een zeer flexibel schema. MongoDB-tabellen dwingen namelijk geen strikt schema af. Je kunt documenten met verschillende velden in dezelfde collectie plaatsen.
Document: Hier gebeurt de echte magie. Een document is een JSON-achtig object (onder de motorkap eigenlijk BSON) dat je data bevat. Documenten kunnen geneste objecten en arrays hebben, wat ze veel natuurlijker maakt om mee te werken in moderne apps. We gaan in de volgende paragraaf verder in op BSON.
Om de MongoDB-architectuur beter te begrijpen, nemen we een voorbeeld. Stel dat we een eenvoudige e-commerce-app bouwen met MongoDB. Onze data zou de volgende structuur hebben.
We hebben een database genaamd shopDB.
Daarin een collectie met de naam products.
En in die collectie documenten die elk product vertegenwoordigen met details zoals naam, prijs en categorie.
Het flexibele schema
Om het concept van een flexibel schema beter te begrijpen: in ons voorbeeld hierboven kan het ene product een discount-veld hebben, terwijl een ander dat niet heeft. MongoDB dwingt niet af dat elk product exact dezelfde velden heeft. Die flexibiliteit is een belangrijke reden waarom ontwikkelaars graag met MongoDB werken, vooral bij applicaties die snel veranderen.
BSON en datatypen
Als je ooit met JSON hebt gewerkt, voelt MongoDB heel natuurlijk aan. In werkelijkheid slaat MongoDB je data niet op als platte JSON. MongoDB gebruikt iets dat BSON heet. BSON staat voor Binary JSON.
Wat is BSON, en waarom gebruikt MongoDB het?
BSON is als de slimmere, efficiëntere neef van JSON. Het behoudt dezelfde leesbare key-value-structuur waar ontwikkelaars van houden, maar voegt een paar superkrachten toe:
Het ondersteunt meer datatypen dan JSON (zoals datums, decimalen en ruwe binaire data).
Het is geoptimaliseerd voor snelle encoding/decoding, waardoor MongoDB-queries sneller draaien.
Het slaat alles op in een compact binair formaat, wat efficiënter is voor grote hoeveelheden data.
Kortom, BSON geeft MongoDB de flexibiliteit van JSON plus de performance en precisie die databases nodig hebben.
Veelvoorkomende BSON-datatypen
MongoDB ondersteunt een breed scala aan datatypen, maar dit zijn de meest voorkomende met voorbeelden:
String :"name": "Alice"
Number : "age": 28
Boolean : "isActive": true
Date : "createdAt": ISODate("2025-08-18T10:00:00Z")
Array : "skills": ["MongoDB", "Node.js", "React"]
Ingebed document. Geneste objecten binnen documenten:
ObjectId: speciaal ID-type dat MongoDB gebruikt voor unieke document-ID’s. ObjectId("64f5c9e8a5f76b1d2c3a4567")
Laten we een voorbeeld bekijken van een gebruikersprofiel in BSON-formaat dat in MongoDB is opgeslagen:
{"_id": ObjectId("64f5c9e8a5f76b1d2c3a4567"),"name":"Moses","age":30,"isActive":true,"skills":["Laravel","MongoDB","Vue"],"address":{"city":"Abuja","country":"Nigeria"},"createdAt": ISODate("2025-08-18T10:00:00Z")
}Mogelijk gemaakt door
Een paar dingen om op te letten:
Het veld _id wordt automatisch gegenereerd als een ObjectId als je het niet zelf instelt.
Datums worden opgeslagen als ISODate, niet als platte strings.
Het geneste address-document en de skills-array laten de flexibiliteit van MongoDB zien in vergelijking met platte SQL-rijen.
Principes voor schemaontwerp
MongoDB laat je je datamodel laten meegroeien met je applicatie dankzij het flexibele schema. Zonder een goed schemaontwerp kan die flexibiliteit echter snel rommelig worden. Gooi de structuur niet overboord alleen omdat MongoDB een flexibel schema biedt. Laten we een paar principes voor schemaontwerp doornemen voor wanneer je met MongoDB werkt.
Flexibel schema vs. schema-loos
MongoDB wordt vaak schema-loos genoemd, maar dat is een beetje misleidend. Elk document hééft een schema—het wordt alleen niet op databaseniveau afgedwongen, tenzij je validatieregels toevoegt.
Zo kunnen twee documenten in dezelfde users-collectie er technisch heel verschillend uitzien:
Die flexibiliteit is prettig tijdens snel prototypen, maar in productie wil je meestal wat consistentie. Daar komt JSON Schema-validatie bij kijken. Je kunt regels afdwingen zodat je geen rommelige, onbetrouwbare data krijgt.
Documenten embedden vs. refereren
Een andere belangrijke beslissing in schemaontwerp voor MongoDB is hoe je relaties modelleert. Laten we kijken naar een paar manieren waarop je relaties kunt modelleren in een MongoDB-document.
Embedden (data nesten binnen een document)
MongoDB ondersteunt het embedden van documenten in een collectie. Deze aanpak gebruik je het best voor data die samen wordt benaderd. Een voorbeeld is een blogpost met de reacties direct erin opgeslagen. Hieronder zie je een voorbeeld van embedden.
{"title":"Intro to MongoDB","comments":[{"user":"Alice","text":"Great post!"},{"user":"Bob","text":"Very helpful."}]}Mogelijk gemaakt door
Data die zo is opgeslagen, presteert beter en vereist minder queries om op te halen of te gebruiken. Als het niet goed is gestructureerd, kan het ook leiden tot opgeblazen documenten.
Refereren (koppelen tussen documenten)
In situaties waarin de omvang van gerelateerde data groot wordt of vaak wordt hergebruikt, is het raadzaam om data tussen documenten te koppelen. Dit heet refereren.
Een voorbeeld is een blogpost met veel reacties. In dit geval kunnen we alleen de ID’s van reacties opslaan, terwijl de daadwerkelijke reacties in een eigen collectie staan. De onderstaande code illustreert deze aanpak.
// Blog post{"title":"Intro to MongoDB","commentIds":[ObjectId("..."), ObjectId("...")]}Mogelijk gemaakt door
// Losstaand comment-document{"_id": ObjectId("..."),"user":"Alice","text":"Great post!"}Mogelijk gemaakt door
Onze data op deze manier structureren houdt documenten kleiner, voorkomt duplicatie en maakt de code onderhoudbaar. Het vereist echter meerdere queries (al kun je $lookup-joins gebruiken in aggregaties).
Veelgemaakte fouten in schemaontwerp vermijden
Te veel embedden: Omdat MongoDB een flexibel schema heeft, is het verleidelijk om alles in één gigantisch document te proppen. Dat is af te raden en kan leiden tot slechte performance. MongoDB hanteert een maximale grootte van 16 MB per document. Dit is om ervoor te zorgen dat ontwikkelaars data goed structureren over documenten.
Indexen negeren: Negeer indexen niet wanneer je met MongoDB werkt. Als je queries niet aansluiten op je schemaontwerp, krijg je trage opvragingen. Ontwerp altijd met toegangspatronen in het achterhoofd.
MongoDB behandelen als SQL: Het is prima om data op te splitsen in kleine documenten. Maar onthoud dat MongoDB een flexibel schema heeft en behandel het niet als een relationele database. Als je je relationele schema 1-op-1 kopieert naar MongoDB (veel kleine, genormaliseerde tabellen/collecties), verlies je de voordelen van documentmodellering.
Neem de tijd om je schema’s te plannen. Een doordacht schema kan de performance van je applicatie sterk beïnvloeden.
Datavalidatie
MongoDB is flexibel. Dat kan, als je niet oplet, snel leiden tot ongestructureerde en ongeorganiseerde data. Hier komt datavalidatie om de hoek kijken.
Zie validatie als het instellen van huisregels voor je collecties. Het zorgt ervoor dat elk document dat wordt ingevoegd of bijgewerkt aan bepaalde regels voldoet, zoals het vereisen van een e-mailveld of controleren dat “age” altijd een getal is.
JSON Schema-validatie gebruiken in MongoDB
MongoDB ondersteunt JSON Schema voor validatie. JSON Schema is een standaardmanier om de vorm van je documenten te beschrijven. Enkele regels die je kunt afdwingen zijn:
Vereiste velden.
Datatypen (string, number, date, etc.).
Waardebereiken of stringpatronen.
Datavalidatie kan ons het beste van twee werelden geven met MongoDB. MongoDB’s flexibele schema plus vangrails helpt onze data schoon te houden.
Regels afdwingen om data schoon te houden
Stel, we hebben een users-collectie. We willen zeker weten dat:
Elke gebruiker een naam heeft (string).
Elke gebruiker een e-mailadres heeft (string, moet op een e-mailadres lijken).
Als age bestaat, dit een getal is dat groter dan of gelijk aan 18 is.
Zo kun je dit afdwingen met een JSON Schema-validator:
db.createCollection("users",{
validator:{
$jsonSchema:{
bsonType:"object",
required:["name","email"],
properties:{
name:{
bsonType:"string",
description:"must be a string and is required"},
email:{
bsonType:"string",
pattern:"^.+@.+\\..+$",
description:"must be a valid email address"},
age:{
bsonType:"int",
minimum:18,
description:"must be an integer greater than or equal to 18"}}}}})
Mogelijk gemaakt door
MongoDB zorgt ervoor dat alleen gevalideerde data in de collectie wordt opgeslagen.
CRUD-bewerkingen
De kern van werken met MongoDB zijn de vier basisbewerkingen: create, read, update en delete, ook wel CRUD genoemd.
Als je CRUD beheerst, kun je vrijwel elke applicatie bouwen. MongoDB maakt dit eenvoudig met een handvol intuïtieve methoden. Laten we ze één voor één doornemen.
Create
Om een nieuw document aan een collectie toe te voegen in MongoDB, gebruik je de methode insertOne(). Zo kun je bijvoorbeeld een nieuw gebruikersdocument aan een user-collectie toevoegen met de onderstaande code.
MongoDB genereert automatisch een unieke _id voor elk aangemaakt document.
Read
Data lezen uit een collectie is eenvoudig. We gebruiken gewoon find(). We kunnen alle documenten ophalen of filteren met voorwaarden. De onderstaande code vindt alle gebruikers uit een user-collectie.
find() retourneert altijd een cursor (waar je overheen kunt itereren). Als je slechts één match wilt, kun je indOne() gebruiken.
Update
Zodra data is aangemaakt, wil je die soms aanpassen. Om data te wijzigen, gebruik je de methode ``` updateOne()```. We geven een filter op en de wijzigingen die we willen toepassen.
Met alleen deze vier bewerkingen kun je alles bouwen, van to-do-apps tot e-commerceplatforms.
Beste praktijken voor beveiliging
Beveiliging mag nooit een ondergeschoven kind zijn als het om databases gaat. Laten we de kern van de best practices doornemen die elke beginner moet kennen.
Authenticatie en autorisatie
Standaard kan een nieuwe MongoDB-installatie geen authenticatie afdwingen. Dat betekent dat iedereen die verbinding kan maken, mogelijk toegang heeft tot je data. Dat is een groot risico als je het niet aanpakt. Om te zorgen dat onze MongoDB niet open blijft staan, moeten we authenticatie en autorisatie implementeren.
Authenticatie zorgt ervoor dat alleen geldige gebruikers kunnen verbinden.
Autorisatie zorgt ervoor dat zelfs geauthenticeerde gebruikers alleen de acties kunnen uitvoeren die ze mogen.
Log bijvoorbeeld niet overal in als root-/admingebruiker, maar maak aparte gebruikers aan voor specifieke taken.
// Nieuwe gebruiker met alleen-lezen-toegang aanmaken
db.createUser({
user:"reportViewer",
pwd:"strongPassword123",
roles:[{ role:"read", db:"salesDB"}]})Mogelijk gemaakt door
Deze gebruiker kan nu alleen lezen uit salesDB, niet schrijven of verwijderen.
Role-based access control (RBAC)
MongoDB gebruikt rollen om te beheren wat gebruikers mogen doen. Enkele ingebouwde rollen zijn:
Read: gebruikers met dit privilege kunnen alleen data bekijken.
ReadWrite: gebruikers met dit privilege kunnen data bekijken en aanpassen.
DbAdmin: gebruikers met dit privilege kunnen indexen, stats en profiling beheren.
Root: gebruikers met dit privilege hebben volledige controle. Gebruik dit niet voor dagelijks werk!
Volg het principe van least privilege: geef gebruikers alleen de rechten die ze nodig hebben om hun werk te doen, terwijl je de veiligheid van de MongoDB-database waarborgt.
Publieke blootstelling vermijden
Een van de meest voorkomende beginnersfouten is MongoDB laten luisteren op de standaardpoort (27017) en binden aan 0.0.0.0 (alle netwerkinterfaces).
Dat betekent dat je database openstaat voor het hele internet. Voorkom dit met de volgende maatregelen:
Bind MongoDB alleen aan localhost of een privé/interne IP.
Gebruik een firewall (of cloud security group) om toegang te beperken.
Maak altijd verbinding via een VPN of SSH-tunnel als externe toegang nodig is.
# Voorbeeld: /etc/mongod.conf
net:
port:27017
bindIp:127.0.0.1 # Alleen lokaal toegankelijkMogelijk gemaakt door
Met deze praktijken is je MongoDB-implementatie een stuk veiliger tegen onbedoelde lekken of kwaadwillige aanvallen.
Conclusie
MongoDB heeft zijn plek verdiend als een van de topdatabases voor moderne applicaties dankzij zijn flexibiliteit en kracht. Of je nu knutselt aan een sideproject of een grootschalig systeem beheert, een solide grip op de basis bespaart je veel tijd en maakt je productiever. In dit artikel bespraken we de volgende zeven kernconcepten die een beginner moet kennen bij het werken met MongoDB. Het gaat om
Wat is het verschil tussen NoSQL- en SQL-databases?⌄
NoSQL-databases zoals MongoDB slaan data op in flexibele, documentgerichte formaten, terwijl SQL-databases gestructureerde tabellen met vaste schema’s gebruiken.
Hoe werkt de architectuur van MongoDB?⌄
MongoDB gebruikt een gedistribueerde, schaalbare architectuur met componenten zoals replica sets voor hoge beschikbaarheid en sharding voor horizontale schaalvergroting.
Wat is BSON en waarom gebruikt MongoDB het?⌄
BSON (Binary JSON) is het dataformaat van MongoDB, ontworpen om JSON-achtige documenten efficiënt op te slaan en extra datatypen te ondersteunen.
Waarom is schemaontwerp belangrijk in MongoDB?⌄
Ook al is MongoDB schema-loos, een doordacht schemaontwerp zorgt voor efficiënte queries, minder redundantie en betere performance van je applicatie.
Hoe kan ik mijn MongoDB-database beveiligen als beginner?⌄
Je kunt authenticatie inschakelen, role-based access control gebruiken, TLS/SSL-verbindingen afdwingen en MongoDB regelmatig updaten om kwetsbaarheden te verhelpen.
MongoDB is een NoSQL-database die een flexibele, documentgerichte aanpak gebruikt om data op te slaan in een JSON-achtig document, georganiseerd in collecties. Kort gezegd betekent dit dat je data in MongoDB wordt opgeslagen in een formaat dat sterk op JSON lijkt. Dat is makkelijk te lezen, eenvoudig te koppelen aan code en goed schaalbaar. MongoDB is modern en volgt een andere aanpak dan relationele databases. Relationele databases slaan data op met rijen in tabellen. Dat heeft voordelen, maar een grote uitdaging is het aanmaken van relaties met extra tabellen. MongoDB lost dit op met een flexibele schema-aanpak waarbij data in collecties wordt opgeslagen en niet in tabellen. Hierdoor kan data die bij een object hoort, samen met dat object worden opgeslagen. In deze tutorial bekijken we zeven concepten die je als beginner moet kennen wanneer je met MongoDB werkt. Laten we beginnen.
NoSQL en documentdatabases begrijpen
Als mensen aan databases denken, denken ze vaak aan SQL, dat data opslaat met rijen, tabellen en relaties. Dat werkt prima voor veel toepassingen, zeker als de data gestructureerd is. Maar het kan beperkend aanvoelen wanneer de data niet netjes in een tabelstructuur past.
Daar komt NoSQL om de hoek kijken. NoSQL betekent simpelweg “not only SQL”. Het omvat een familie van databases die afstapt van het rigide tabelmodel en meer flexibiliteit biedt. In plaats van al je data te dwingen in vooraf gedefinieerde kolommen, kun je die structureren op een manier die past bij hoe je applicatie werkelijk werkt.
MongoDB is een documentdatabase, een van de populairste typen NoSQL-databases. In plaats van rijen en tabellen wordt data opgeslagen als documenten in collecties. Elk document lijkt sterk op JSON, met sleutel-waardeparen, arrays en zelfs geneste objecten. Hierdoor kun je real-world data heel natuurlijk modelleren. Een goed voorbeeld is een gebruikersprofiel met adressen en voorkeuren in één record, zonder dat je het over meerdere tabellen hoeft te verspreiden. Laten we kijken hoe zo’n gebruikersprofiel eruitziet in één record in MongoDB.
Basis van de MongoDB-architectuur
Om effectief met MongoDB te werken, moet je begrijpen hoe data in een MongoDB-database is georganiseerd. In tegenstelling tot SQL-databases, waar data is gestructureerd in tabellen en rijen, gebruikt MongoDB collecties en documenten.
Om de MongoDB-architectuur beter te begrijpen, nemen we een voorbeeld. Stel dat we een eenvoudige e-commerce-app bouwen met MongoDB. Onze data zou de volgende structuur hebben.
Het flexibele schema
Om het concept van een flexibel schema beter te begrijpen: in ons voorbeeld hierboven kan het ene product een discount-veld hebben, terwijl een ander dat niet heeft. MongoDB dwingt niet af dat elk product exact dezelfde velden heeft. Die flexibiliteit is een belangrijke reden waarom ontwikkelaars graag met MongoDB werken, vooral bij applicaties die snel veranderen.
BSON en datatypen
Als je ooit met JSON hebt gewerkt, voelt MongoDB heel natuurlijk aan. In werkelijkheid slaat MongoDB je data niet op als platte JSON. MongoDB gebruikt iets dat BSON heet. BSON staat voor Binary JSON.
Wat is BSON, en waarom gebruikt MongoDB het?
BSON is als de slimmere, efficiëntere neef van JSON. Het behoudt dezelfde leesbare key-value-structuur waar ontwikkelaars van houden, maar voegt een paar superkrachten toe:
Kortom, BSON geeft MongoDB de flexibiliteit van JSON plus de performance en precisie die databases nodig hebben.
Veelvoorkomende BSON-datatypen
MongoDB ondersteunt een breed scala aan datatypen, maar dit zijn de meest voorkomende met voorbeelden:
"name": "Alice""age": 28"isActive": true"createdAt": ISODate("2025-08-18T10:00:00Z")"skills": ["MongoDB", "Node.js", "React"]ObjectId("64f5c9e8a5f76b1d2c3a4567")Laten we een voorbeeld bekijken van een gebruikersprofiel in BSON-formaat dat in MongoDB is opgeslagen:
Een paar dingen om op te letten:
_idwordt automatisch gegenereerd als eenObjectIdals je het niet zelf instelt.ISODate, niet als platte strings.address-document en deskills-array laten de flexibiliteit van MongoDB zien in vergelijking met platte SQL-rijen.Principes voor schemaontwerp
MongoDB laat je je datamodel laten meegroeien met je applicatie dankzij het flexibele schema. Zonder een goed schemaontwerp kan die flexibiliteit echter snel rommelig worden. Gooi de structuur niet overboord alleen omdat MongoDB een flexibel schema biedt. Laten we een paar principes voor schemaontwerp doornemen voor wanneer je met MongoDB werkt.
Flexibel schema vs. schema-loos
MongoDB wordt vaak schema-loos genoemd, maar dat is een beetje misleidend. Elk document hééft een schema—het wordt alleen niet op databaseniveau afgedwongen, tenzij je validatieregels toevoegt.
Zo kunnen twee documenten in dezelfde
users-collectie er technisch heel verschillend uitzien:Die flexibiliteit is prettig tijdens snel prototypen, maar in productie wil je meestal wat consistentie. Daar komt JSON Schema-validatie bij kijken. Je kunt regels afdwingen zodat je geen rommelige, onbetrouwbare data krijgt.
Documenten embedden vs. refereren
Een andere belangrijke beslissing in schemaontwerp voor MongoDB is hoe je relaties modelleert. Laten we kijken naar een paar manieren waarop je relaties kunt modelleren in een MongoDB-document.
Embedden (data nesten binnen een document)
MongoDB ondersteunt het embedden van documenten in een collectie. Deze aanpak gebruik je het best voor data die samen wordt benaderd. Een voorbeeld is een blogpost met de reacties direct erin opgeslagen. Hieronder zie je een voorbeeld van embedden.
Data die zo is opgeslagen, presteert beter en vereist minder queries om op te halen of te gebruiken. Als het niet goed is gestructureerd, kan het ook leiden tot opgeblazen documenten.
Refereren (koppelen tussen documenten)
In situaties waarin de omvang van gerelateerde data groot wordt of vaak wordt hergebruikt, is het raadzaam om data tussen documenten te koppelen. Dit heet refereren.
Een voorbeeld is een blogpost met veel reacties. In dit geval kunnen we alleen de ID’s van reacties opslaan, terwijl de daadwerkelijke reacties in een eigen collectie staan. De onderstaande code illustreert deze aanpak.
Onze data op deze manier structureren houdt documenten kleiner, voorkomt duplicatie en maakt de code onderhoudbaar. Het vereist echter meerdere queries (al kun je $lookup-joins gebruiken in aggregaties).
Veelgemaakte fouten in schemaontwerp vermijden
Te veel embedden: Omdat MongoDB een flexibel schema heeft, is het verleidelijk om alles in één gigantisch document te proppen. Dat is af te raden en kan leiden tot slechte performance. MongoDB hanteert een maximale grootte van 16 MB per document. Dit is om ervoor te zorgen dat ontwikkelaars data goed structureren over documenten.
Indexen negeren: Negeer indexen niet wanneer je met MongoDB werkt. Als je queries niet aansluiten op je schemaontwerp, krijg je trage opvragingen. Ontwerp altijd met toegangspatronen in het achterhoofd.
MongoDB behandelen als SQL: Het is prima om data op te splitsen in kleine documenten. Maar onthoud dat MongoDB een flexibel schema heeft en behandel het niet als een relationele database. Als je je relationele schema 1-op-1 kopieert naar MongoDB (veel kleine, genormaliseerde tabellen/collecties), verlies je de voordelen van documentmodellering.
Neem de tijd om je schema’s te plannen. Een doordacht schema kan de performance van je applicatie sterk beïnvloeden.
Datavalidatie
MongoDB is flexibel. Dat kan, als je niet oplet, snel leiden tot ongestructureerde en ongeorganiseerde data. Hier komt datavalidatie om de hoek kijken.
Zie validatie als het instellen van huisregels voor je collecties. Het zorgt ervoor dat elk document dat wordt ingevoegd of bijgewerkt aan bepaalde regels voldoet, zoals het vereisen van een e-mailveld of controleren dat “age” altijd een getal is.
JSON Schema-validatie gebruiken in MongoDB
MongoDB ondersteunt JSON Schema voor validatie. JSON Schema is een standaardmanier om de vorm van je documenten te beschrijven. Enkele regels die je kunt afdwingen zijn:
Datavalidatie kan ons het beste van twee werelden geven met MongoDB. MongoDB’s flexibele schema plus vangrails helpt onze data schoon te houden.
Regels afdwingen om data schoon te houden
Stel, we hebben een users-collectie. We willen zeker weten dat:
Zo kun je dit afdwingen met een JSON Schema-validator:
MongoDB zorgt ervoor dat alleen gevalideerde data in de collectie wordt opgeslagen.
CRUD-bewerkingen
De kern van werken met MongoDB zijn de vier basisbewerkingen: create, read, update en delete, ook wel CRUD genoemd.
Als je CRUD beheerst, kun je vrijwel elke applicatie bouwen. MongoDB maakt dit eenvoudig met een handvol intuïtieve methoden. Laten we ze één voor één doornemen.
Create
Om een nieuw document aan een collectie toe te voegen in MongoDB, gebruik je de methode
insertOne(). Zo kun je bijvoorbeeld een nieuw gebruikersdocument aan eenuser-collectie toevoegen met de onderstaande code.MongoDB genereert automatisch een unieke
_idvoor elk aangemaakt document.Read
Data lezen uit een collectie is eenvoudig. We gebruiken gewoon
find(). We kunnen alle documenten ophalen of filteren met voorwaarden. De onderstaande code vindt alle gebruikers uit een user-collectie.We kunnen filteren op een unieke sleutel—bijvoorbeeld een e-mailadres.
find()retourneert altijd een cursor (waar je overheen kunt itereren). Als je slechts één match wilt, kun jeindOne()gebruiken.Update
Zodra data is aangemaakt, wil je die soms aanpassen. Om data te wijzigen, gebruik je de methode ``` updateOne()```. We geven een filter op en de wijzigingen die we willen toepassen.
De operator
$setwerkt alleen het opgegeven veld bij en laat de rest van het document ongewijzigd.Delete
Tot slot kunnen we documenten verwijderen met
deleteOne()ofdeleteMany(). Onderstaand voorbeeld toont eendeleteOne-actie.Let op: verwijderen is definitief.
Met alleen deze vier bewerkingen kun je alles bouwen, van to-do-apps tot e-commerceplatforms.
Beste praktijken voor beveiliging
Beveiliging mag nooit een ondergeschoven kind zijn als het om databases gaat. Laten we de kern van de best practices doornemen die elke beginner moet kennen.
Authenticatie en autorisatie
Standaard kan een nieuwe MongoDB-installatie geen authenticatie afdwingen. Dat betekent dat iedereen die verbinding kan maken, mogelijk toegang heeft tot je data. Dat is een groot risico als je het niet aanpakt. Om te zorgen dat onze MongoDB niet open blijft staan, moeten we authenticatie en autorisatie implementeren.
Log bijvoorbeeld niet overal in als root-/admingebruiker, maar maak aparte gebruikers aan voor specifieke taken.
Deze gebruiker kan nu alleen lezen uit
salesDB, niet schrijven of verwijderen.Role-based access control (RBAC)
MongoDB gebruikt rollen om te beheren wat gebruikers mogen doen. Enkele ingebouwde rollen zijn:
Volg het principe van least privilege: geef gebruikers alleen de rechten die ze nodig hebben om hun werk te doen, terwijl je de veiligheid van de MongoDB-database waarborgt.
Publieke blootstelling vermijden
Een van de meest voorkomende beginnersfouten is MongoDB laten luisteren op de standaardpoort (27017) en binden aan 0.0.0.0 (alle netwerkinterfaces).
Dat betekent dat je database openstaat voor het hele internet. Voorkom dit met de volgende maatregelen:
localhostof een privé/interne IP.Met deze praktijken is je MongoDB-implementatie een stuk veiliger tegen onbedoelde lekken of kwaadwillige aanvallen.
Conclusie
MongoDB heeft zijn plek verdiend als een van de topdatabases voor moderne applicaties dankzij zijn flexibiliteit en kracht. Of je nu knutselt aan een sideproject of een grootschalig systeem beheert, een solide grip op de basis bespaart je veel tijd en maakt je productiever. In dit artikel bespraken we de volgende zeven kernconcepten die een beginner moet kennen bij het werken met MongoDB. Het gaat om
Een goed begrip van de bovenstaande concepten geeft je een sterke basis wanneer je met MongoDB werkt. Voor meer details, bekijk zeker de MongoDB Docs en DataCamp's Introduction to MongoDB in Python-cursus.