Advertiser

Aggregationsoperationer bearbetar dataposter och returnerar beräknade resultat. Aggregeringsoperationer grupperar värden från flera dokument och kan utföra en mängd olika operationer på de grupperade uppgifterna för att returnera ett enda resultat. I SQL count(*) och med group by är en motsvarighet till MongoDB-aggregation.

Metoden aggregate()

För aggregering i MongoDB bör du använda metoden aggregate().

Syntax

Den grundläggande syntaxen för aggregate() metoden är följande –

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

Exempel

I samlingen har du följande data –

{ _id: ObjectId(7df78ad8902c) title: 'MongoDB Overview', description: 'MongoDB is no sql database', by_user: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: , likes: 100},{ _id: ObjectId(7df78ad8902d) title: 'NoSQL Overview', description: 'No sql database is very fast', by_user: 'tutorials point', url: 'http://www.tutorialspoint.com', tags: , likes: 10},{ _id: ObjectId(7df78ad8902e) title: 'Neo4j Overview', description: 'Neo4j is no sql database', by_user: 'Neo4j', url: 'http://www.neo4j.com', tags: , likes: 750},

Nu från ovanstående samling, Om du vill visa en lista som anger hur många handledningar som skrivits av varje användare använder du följande aggregate()-metod –

> db.mycol.aggregate(){ "_id" : "tutorials point", "num_tutorial" : 2 }{ "_id" : "Neo4j", "num_tutorial" : 1 }>

Sql-ekvivalent fråga för ovanstående användningsfall är select by_user, count(*) from mycol group by by_user.

I exemplet ovan har vi grupperat dokumenten efter fältet by_user och vid varje förekomst av by user ökas det tidigare värdet av summan. Nedan följer en lista över tillgängliga aggregeringsuttryck:

Uttryck Beskrivning Exempel
$sum Summar upp det definierade värdet från alla dokument i samlingen. db.mycol.aggregate()
$avg Beräknar medelvärdet av alla givna värden från alla dokument i samlingen. db.mycol.aggregate()
$min Hämtar minimum av motsvarande värden från alla dokument i samlingen. db.mycol.aggregate()
$max Hämtar det högsta av motsvarande värden från alla dokument i samlingen. db.mycol.aggregate()
$push Insätter värdet i en array i det resulterande dokumentet. db.mycol.aggregate()
$addToSet Insätter värdet i en matris i det resulterande dokumentet men skapar inga dubbletter. db.mycol.aggregate()
$first Hämtar det första dokumentet från källdokumenten enligt grupperingen. Typiskt sett är detta endast meningsfullt tillsammans med något tidigare tillämpat ”$sort”-steg. db.mycol.aggregate()
$last Hämtar det sista dokumentet från källdokumenten i enlighet med grupperingen. Typiskt sett är detta endast meningsfullt tillsammans med något tidigare tillämpat ”$sort”-steg. db.mycol.aggregate()

Pipeline-begreppet

I UNIX-kommandon innebär skalpipeline möjligheten att utföra en operation på en viss inmatning och använda utmatningen som inmatning för nästa kommando och så vidare. MongoDB har också stöd för samma koncept i aggregationsramverket. Det finns en uppsättning möjliga steg och vart och ett av dessa tas som en uppsättning dokument som ingång och producerar en resulterande uppsättning dokument (eller det slutliga resulterande JSON-dokumentet i slutet av pipelinen). Detta kan sedan i sin tur användas för nästa steg och så vidare.

Följande är de möjliga stegen i ramverket för aggregering –

  • $project – Används för att välja några specifika fält från en samling.

  • $match – Detta är en filtreringsoperation och kan därmed minska mängden dokument som ges som indata till nästa steg.

  • $group – Detta gör själva aggregeringen som diskuterats ovan.

  • $sort – Sorterar dokumenten.

  • $skip – Med detta är det möjligt att hoppa framåt i listan över dokument för ett givet antal dokument.

  • $limit – Detta begränsar antalet dokument att titta på, med det givna antalet med utgångspunkt från de aktuella positionerna.

  • $unwind – Detta används för att avveckla dokument som använder matriser. När man använder en array är data på ett sätt för-hopade och denna operation kommer att ångras med detta för att få individuella dokument igen. Med detta steg kommer vi alltså att öka antalet dokument för nästa steg.

Advertisements

Lämna ett svar

Din e-postadress kommer inte publiceras.