Aggregering i MongoDB är ett värdefullt verktyg för att analysera och filtrera databaser. Pipelinesystemet gör det möjligt att specificera frågor, vilket möjliggör högst anpassade resultat.

Vad är aggregering i MongoDB?

MongoDB är en icke-relationell och dokumentorienterad databas som är utformad för användning med stora och varierande datamängder. Genom att avstå från rigida tabeller och använda tekniker som sharding (lagring av data på olika noder) kan NoSQL-lösningen skalas horisontellt samtidigt som den förblir mycket flexibel och motståndskraftig mot fel.

Dokument i det binära JSON-formatet BSON samlas i samlingar och kan sökas och redigeras med hjälp av MongoDB Query Language (MQL). Även om detta språk erbjuder många alternativ är det inte lämpligt (eller kanske inte tillräckligt lämpligt) för dataanalys. Därför erbjuder MongoDB aggregering.

Inom datavetenskap avser detta begrepp olika processer. I MongoDB avser aggregering analys och sammanfattning av data med hjälp av olika operationer för att producera ett enda tydligt resultat. Under denna process analyseras och filtreras data från ett eller flera dokument enligt användardefinierade faktorer.

I följande avsnitt tittar vi inte bara på de möjligheter som MongoDB-aggregering erbjuder för omfattande dataanalys, utan ger också exempel på hur du kan använda metoden aggregate ( ) med ett databashanteringssystem.

Vad behöver jag för MongoDB-aggregering?

Det finns endast några få krav för att använda aggregering i MongoDB. Metoden exekveras i skalet och fungerar enligt logiska regler som du kan anpassa efter behoven i din analys.

För att kunna använda aggregering i Mongo DB måste du ha MongoDB installerat på din dator. Om så inte är fallet kan du läsa om hur du laddar ner, installerar och kör databasen i vår omfattande MongoDB-handledning.

Du bör också använda en kraftfull brandvägg och se till att din databas är konfigurerad enligt alla gällande säkerhetsstandarder. För att kunna köra aggregering i MongoDB måste du ha administratörsrättigheter.

Databasen fungerar på alla plattformar, så stegen som beskrivs nedan gäller för alla operativsystem.

Vad är pipeline i MongoDB:s aggregeringsramverk?

I MongoDB kan du utföra enkla sökningar eller frågor, och databasen visar omedelbart resultaten. Denna metod är dock mycket begränsad, eftersom den endast kan visa resultat som redan finns i de lagrade dokumenten. Denna typ av fråga är inte avsedd för djupgående analyser, återkommande mönster eller för att härleda ytterligare information.

Ibland måste olika källor inom en databas beaktas för att man ska kunna dra meningsfulla slutsatser. MongoDB-aggregering används i sådana situationer. För att uppnå sådana resultat använder metoden aggregate ( ) pipelines.

Rörledningens roll

1

Medan indata består av många olika data, är utdata (dvs. slutresultatet) entydigt. Vi kommer att förklara de olika stegen i MongoDB-aggregering senare i detta avsnitt.

Syntax för MongoDB-aggregeringspipeline

Först är det värt att ta en kort titt på syntaxen för aggregering i MongoDB. Metoden är alltid strukturerad enligt samma format och kan anpassas efter dina specifika krav. Den grundläggande strukturen ser ut så här:

db.collection_name.aggregate ( pipeline, options )
shell

Här är collection_name namnet på den aktuella samlingen. Stegen i MongoDB-aggregeringen listas under pipeline. options kan användas för ytterligare valfria parametrar som definierar utdata.

Pipeline-stadier

Det finns många steg i aggregeringspipeline i MongoDB. De flesta av dem kan användas flera gånger inom en pipeline. Det skulle gå utanför ramen för denna artikel att lista alla alternativ här, särskilt eftersom vissa endast krävs för mycket specifika operationer. För att ge dig en uppfattning om stegen listar vi dock några av de mest använda här:

  • $count: Detta steg ger dig en indikation på hur många BSON-dokument som har beaktats för steget eller stegen i pipelinen.
  • $group: Detta steg sorterar och grupperar dokument enligt vissa parametrar.
  • $limit: Begränsar antalet dokument som skickas vidare till nästa steg i pipelinen.
  • $match: Med $match-steget begränsar du de dokument som används för följande steg.
  • $out: Detta steg används för att inkludera resultaten från MongoDB-aggregeringen i samlingen. Detta steg kan endast användas i slutet av en pipeline.
  • $project: Använd $project för att välja specifika fält från en samling.
  • $skip: I detta steg ignoreras ett visst antal dokument. Du kan ange detta med ett alternativ.
  • $sort: Denna operation sorterar dokumenten i användarens samling. Dokumenten ändras dock inte utöver detta.
  • $unset: $unset exkluderar vissa fält. Det gör motsatsen till vad $project gör.

Ett exempel på aggregering i MongoDB

För att hjälpa dig att bättre förstå hur aggregering i MongoDB fungerar visar vi några exempel på olika steg och hur du använder dem. För att använda MongoDB-aggregering öppnar du skalet som administratör. Normalt visas först en testdatabas. Om du vill använda en annan databas använder du kommandot use.

I det här exemplet kan vi tänka oss en databas som innehåller uppgifter om kunder som har köpt en viss produkt. För att göra det enkelt har databasen bara tio dokument, som alla har samma struktur:

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

Följande information om kunderna har inkluderats: deras namn, bostadsort, land och antalet produkter de har köpt.

Om du vill prova aggregering i MongoDB kan du använda metod insertMany ( ) för att lägga till alla dokument med kunddata till samlingen med namnet ”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

En lista med objekt-ID för varje enskilt dokument visas.

Hur man använder $match

För att illustrera möjligheterna med aggregering i MongoDB kommer vi först att tillämpa $match-steget på vår samling “customers”. Utan ytterligare parametrar skulle detta helt enkelt ge en komplett lista över kunddata som anges ovan.

I följande exempel har vi dock instruerat den att endast visa kunder från Italien. Här är kommandot:

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

Nu visas endast objekt-ID:n och informationen för de två kunderna från Italien.

Använd $sort för en bättre översikt

Om du vill organisera din kunddatabas kan du använda steget $sort. I följande exempel instruerar vi systemet att sortera alla kunddata efter antal köpta enheter, med början från det högsta antalet. Inmatningen ser ut så här:

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

Begränsa utdata med $project

Med de steg som använts hittills ser du att utdata är relativt omfattande. Till exempel visas alltid objekt-ID:t utöver den faktiska informationen i dokumenten. Du kan använda $project i MongoDB-aggregeringspipeline för att avgöra vilken information som ska visas. För att göra detta anger vi värdet 1 för obligatoriska fält och 0 för fält som inte behöver inkluderas i utdata. I vårt exempel vill vi bara se kundens namn och antalet köpta produkter. För att göra detta anger vi följande:

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

Kombinera flera steg med aggregering i MongoDB

MongoDB-aggregering ger dig också möjlighet att tillämpa flera steg i följd. Dessa körs sedan efter varandra, och i slutet finns ett resultat som tar hänsyn till alla önskade parametrar. Om du till exempel bara vill visa namnen och inköpen för skotska kunder i fallande ordning kan du använda stegen som beskrivs ovan på följande sätt:

db.customers.aggregate ( [
	{ $match : { "country" : "Scotland" } }
	{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
	{ $sort : { "quantity" : -1 } }
] )
shell
Gå till huvudmeny