Aggregatie in MongoDB is een waardevol hulpmiddel voor het analyseren en filteren van databases. Het pijplijnsysteem maakt het mogelijk om query’s te specificeren, waardoor zeer gepersonaliseerde outputs mogelijk zijn.

Wat is aggregatie in MongoDB?

MongoDB is een niet-relationele en documentgeoriënteerde database die is ontworpen voor gebruik met grote en diverse hoeveelheden gegevens. Door af te zien van rigide tabellen en technieken zoals sharding (het opslaan van gegevens op verschillende knooppunten) te gebruiken, kan de NoSQL-oplossing horizontaal worden geschaald en tegelijkertijd zeer flexibel en bestand tegen storingen blijven.

Documenten in het binaire JSON-formaat BSON worden gebundeld in collecties en kunnen worden opgevraagd en bewerkt met behulp van de MongoDB Query Language (MQL). Hoewel deze taal veel mogelijkheden biedt, is hij niet geschikt (of misschien niet geschikt genoeg) voor gegevensanalyse. Daarom biedt MongoDB aggregatie.

In de informatica verwijst deze term naar verschillende processen. In MongoDB verwijst aggregatie naar het analyseren en samenvatten van gegevens met behulp van verschillende bewerkingen om één duidelijk resultaat te verkrijgen. Tijdens dit proces worden gegevens uit één of meer documenten geanalyseerd en gefilterd op basis van door de gebruiker gedefinieerde factoren.

In de volgende paragrafen bekijken we niet alleen de mogelijkheden die MongoDB-aggregatie biedt voor uitgebreide gegevensanalyse, maar geven we ook voorbeelden van hoe u de aggregate ( ) kunt gebruiken met een databasebeheersysteem.

Wat heb ik nodig voor MongoDB-aggregatie?

Er zijn slechts enkele vereisten voor het gebruik van aggregatie in MongoDB. De methode wordt uitgevoerd in de shell en werkt volgens logische regels die u kunt aanpassen aan de behoeften van uw analyse.

Om aggregatie in Mongo DB te kunnen gebruiken, moet MongoDB al op uw computer zijn geïnstalleerd. Als dat niet het geval is, kunt u in onze uitgebreide MongoDB-handleiding lezen hoe u de database kunt downloaden, installeren en uitvoeren.

U moet ook een krachtige firewall gebruiken en ervoor zorgen dat uw database is ingesteld volgens alle huidige beveiligingsnormen. Om aggregatie in MongoDB uit te voeren, moet u beheerdersrechten hebben.

De database werkt op alle platforms, dus de hieronder beschreven stappen zijn van toepassing op alle besturingssystemen.

Wat is de pijplijn in het MongoDB-aggregatieframework?

In MongoDB kunt u eenvoudige zoekopdrachten of query’s uitvoeren, waarbij de database onmiddellijk de resultaten weergeeft. Deze methode is echter zeer beperkt, omdat alleen resultaten kunnen worden weergegeven die al in de opgeslagen documenten aanwezig zijn. Dit type query is niet bedoeld voor diepgaande analyses, terugkerende patronen of het afleiden van verdere informatie.

Soms moet rekening worden gehouden met verschillende bronnen binnen een database om zinvolle conclusies te kunnen trekken. MongoDB-aggregatie wordt gebruikt voor dit soort situaties. Om dergelijke resultaten te bereiken, maakt de aggregate ( ) gebruik van pijplijnen.

De rol van de pijpleiding

Aggregatiepijplijnen in MongoDB zijn processen waarbij bestaande gegevens worden geanalyseerd en gefilterd met behulp van verschillende stappen om het resultaat weer te geven waarnaar gebruikers op zoek zijn. Deze stappen worden fasen genoemd. Afhankelijk van de vereisten kunnen een of meer fasen worden gestart. Deze worden na elkaar uitgevoerd en wijzigen uw oorspronkelijke invoer, zodat de uitvoer (de informatie waarnaar u op zoek bent) aan het einde kan worden weergegeven.

Hoewel de input uit talrijke gegevens bestaat, is de output (d.w.z. het eindresultaat) enkelvoudig. We zullen de verschillende fasen van MongoDB-aggregatie later in dit hoofdstuk toelichten.

Syntaxis van de MongoDB-aggregatiepijplijn

Allereerst is het de moeite waard om even te kijken naar de syntaxis van aggregatie in MongoDB. De methode is altijd volgens hetzelfde formaat gestructureerd en kan worden aangepast aan uw specifieke vereisten. De basisstructuur ziet er als volgt uit:

db.collection_name.aggregate ( pipeline, options )
shell

Hier is collection_name de naam van de betreffende collectie. De fasen van MongoDB-aggregatie worden vermeld onder pipeline. options kan worden gebruikt voor verdere optionele parameters die de uitvoer definiëren.

Pijplijnfasen

Er zijn talrijke fasen voor de aggregatiepijplijn in MongoDB. De meeste daarvan kunnen meerdere keren binnen een pijplijn worden gebruikt. Het zou het bestek van dit artikel te buiten gaan om hier alle opties op te sommen, vooral omdat sommige alleen voor zeer specifieke bewerkingen nodig zijn. Om u echter een idee te geven van de fasen, noemen we hier een paar van de meest gebruikte:

  • $count: Deze fase geeft u een indicatie van hoeveel BSON-documenten in aanmerking zijn genomen voor de fase of fasen in de pijplijn.
  • $group: Deze fase sorteert en bundelt documenten op basis van bepaalde parameters.
  • $limit: Beperkt het aantal documenten dat wordt doorgegeven aan de volgende fase in de pijplijn.
  • $match: Met de $match-fase beperkt u de documenten die voor de volgende fase worden gebruikt.
  • $out: Deze fase wordt gebruikt om de resultaten van de MongoDB-aggregatie in de collectie op te nemen. Deze fase kan alleen aan het einde van een pijplijn worden gebruikt.
  • $project: Gebruik $project om specifieke velden uit een verzameling te selecteren.
  • $skip: Deze fase negeert een bepaald aantal documenten. U kunt dit specificeren met een optie.
  • $sort: Deze bewerking sorteert de documenten in de collectie van de gebruiker. De documenten worden echter verder niet gewijzigd.
  • $unset: $unset sluit bepaalde velden uit. Het doet het tegenovergestelde van wat $project doet.

Een voorbeeld van aggregatie in MongoDB

Om u te helpen beter te begrijpen hoe aggregatie in MongoDB werkt, laten we u enkele voorbeelden zien van verschillende fasen en hoe u deze kunt gebruiken. Om MongoDB-aggregatie te gebruiken, opent u de shell als beheerder. Normaal gesproken wordt eerst een testdatabase weergegeven. Als u een andere database wilt gebruiken, gebruikt u het commando use.

Laten we voor dit voorbeeld eens kijken naar een database met gegevens van klanten die een bepaald product hebben gekocht. Om het simpel te houden, heeft deze database maar tien documenten, die allemaal hetzelfde zijn opgebouwd:

{
	"name" : "Smith",
	"city" : "Glasgow",
	"country" : "Scotland",
	"quantity" : 14
}
shell

De volgende informatie over de klanten is opgenomen: hun naam, woonplaats, land en het aantal producten dat ze hebben gekocht.

Als u aggregatie in MongoDB wilt uitproberen, kunt u methode insertMany ( ) gebruiken om alle documenten met klantgegevens toe te voegen aan de collectie met de naam ‘customers’:

db.customers.insertMany ( [
	{ "name" : "Smith", "city" : "Glasgow", "country" : "Scotland", "quantity" : 14 },
	{ "name" : "Meyer", "city" : "Hamburg", "country" : "Germany", "quantity" : 26 },
	{ "name" : "Lee", "city" : "Birmingham", "country" : "England", "quantity" : 5 },
	{ "name" : "Rodriguez", "city" : "Madrid", "country" : "Spain", "quantity" : 19 },
	{ "name" : "Nowak", "city" : "Krakow", "country" : "Poland", "quantity" : 13 },
{ "name" : "Rossi", "city" : "Milano", "country" : "Italy", "quantity" : 10 },
{ "name" : "Arslan", "city" : "Ankara", "country" : "Turkey", "quantity" : 18 },
{ "name" : "Martin", "city" : "Lyon", "country" : "France", "quantity" : 9 },
{ "name" : "Mancini", "city" : "Rome", "country" : "Italy", "quantity" : 21 },
{ "name" : "Schulz", "city" : "Munich", "country" : "Germany", "quantity" : 2 }
] )
shell

Er wordt een lijst met object-ID’s voor elk afzonderlijk document weergegeven.

Hoe gebruik je $match?

Om de mogelijkheden van aggregatie in MongoDB te illustreren, passen we eerst de $match-fase toe op onze ‘customers’-collectie. Zonder aanvullende parameters zou dit simpelweg de volledige lijst met klantgegevens opleveren die hierboven is weergegeven.

In het volgende voorbeeld hebben we het echter geïnstrueerd om ons alleen klanten uit Italië te tonen. Hier is het commando:

db.customers.aggregate ( [
	{ $match : { "country" : "Italy" } }
] )
shell

U krijgt nu alleen de object-ID’s en informatie van de twee klanten uit Italië te zien.

Gebruik $sort voor een beter overzicht

Als u uw klantendatabase wilt ordenen, kunt u de $sort-fase gebruiken. In het volgende voorbeeld geven we het systeem de opdracht om alle klantgegevens te sorteren op basis van het aantal gekochte eenheden, beginnend met het hoogste aantal. De invoer ziet er als volgt uit:

db.customers.aggregate ( [
	{ $sort : { "quantity" : -1 } }
] )
shell

Beperk de uitvoer met $project

Met de tot nu toe gebruikte fasen zul je zien dat de uitvoer relatief uitgebreid is. Naast de feitelijke informatie in de documenten wordt bijvoorbeeld ook altijd de object-ID uitgevoerd. Je kunt $project in de MongoDB-aggregatiepijplijn gebruiken om te bepalen welke informatie moet worden uitgevoerd. Hiervoor stellen we de waarde 1 in voor verplichte velden en 0 voor velden die niet in de uitvoer hoeven te worden opgenomen. In ons voorbeeld willen we alleen de naam van de klant en het aantal gekochte producten zien. Hiervoor voeren we het volgende in:

db.customers.aggregate ( [
	{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
] )
shell

Combineer meerdere fasen met aggregatie in MongoDB

MongoDB-aggregatie biedt u ook de mogelijkheid om meerdere fasen achter elkaar toe te passen. Deze worden dan achter elkaar uitgevoerd en aan het einde is er een uitvoer die rekening houdt met alle gewenste parameters. Als u bijvoorbeeld alleen de namen en aankopen van Schotse klanten in aflopende volgorde wilt weergeven, kunt u de hierboven beschreven fasen als volgt gebruiken:

db.customers.aggregate ( [
	{ $match : { "country" : "Scotland" } }
	{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
	{ $sort : { "quantity" : -1 } }
] )
shell
Ga naar hoofdmenu