Hirdetések

Az összesítési műveletek adatrekordokat dolgoznak fel és kiszámított eredményeket adnak vissza. Az aggregációs műveletek több dokumentumból származó értékeket csoportosítanak, és a csoportosított adatokon különböző műveleteket végezhetnek, hogy egyetlen eredményt adjanak vissza. Az SQL-ben a count(*) és a group by a MongoDB aggregáció megfelelője.

Az aggregate() módszer

A MongoDB-ben az aggregációhoz az aggregate() módszert kell használni.

Szintaxis

Az aggregate() metódus alapvető szintaxisa a következő –

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

Példa

A gyűjteményben a következő adatok vannak –

{ _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},

A fenti gyűjteményből, ha egy olyan listát szeretnénk megjeleníteni, amelyből kiderül, hogy az egyes felhasználók hány oktatóprogramot írtak, akkor a következő aggregate() metódust használjuk –

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

A fenti felhasználási esetnek megfelelő SQL lekérdezés a következő lesz: select by_user, count(*) from mycol group by_user.

A fenti példában a dokumentumokat a by_user mező szerint csoportosítottuk, és a by user minden egyes előfordulása esetén az összeg előző értéke növekszik. Az alábbiakban a rendelkezésre álló aggregációs kifejezések listája következik.

Kifejezés leírás példa
$sum A gyűjtemény összes dokumentumának meghatározott értékét összegzi. db.mycol.aggregate()
$avg Kiszámítja a megadott értékek átlagát a gyűjtemény összes dokumentumából. db.mycol.aggregate()
$min A gyűjtemény összes dokumentumából a megfelelő értékek minimumát kapja. db.mycol.aggregate()
$max A megfelelő értékek maximumát kapja a gyűjtemény összes dokumentumából. db.mycol.aggregate()
$push Elhelyezi az értéket egy tömbbe a kapott dokumentumban. db.mycol.aggregate()
$addToSet Elhelyezi az értéket egy tömbbe a kapott dokumentumban, de nem hoz létre duplikátumokat. db.mycol.aggregate()
$first A forrásdokumentumok közül a csoportosításnak megfelelően az első dokumentumot szerzi be. Ennek általában csak valamilyen korábban alkalmazott “$sort”-lépcsővel együtt van értelme. db.mycol.aggregate()
$last A forrásdokumentumok közül a csoportosítás szerint az utolsó dokumentumot szerzi meg. Ennek jellemzően csak valamilyen korábban alkalmazott “$sort”-lépcsővel együtt van értelme. db.mycol.aggregate()

Pipeline fogalma

A UNIX parancsban a shell pipeline azt a lehetőséget jelenti, hogy egy műveletet valamilyen bemeneten végrehajtunk, és a kimenetet a következő parancs bemeneteként használjuk, és így tovább. A MongoDB ugyanezt a koncepciót támogatja az aggregációs keretrendszerben is. Lehetséges szakaszok halmaza van, és ezek mindegyikét dokumentumhalmazként veszi bemenetként, és egy eredményül szolgáló dokumentumhalmazt állít elő (vagy a csővezeték végén a végső eredményül szolgáló JSON-dokumentumot). Ez viszont felhasználható a következő szakaszhoz és így tovább.

A következők a lehetséges szakaszok az aggregációs keretrendszerben –

  • $project – Néhány konkrét mező kiválasztására szolgál egy gyűjteményből.

  • $match – Ez egy szűrési művelet, és így csökkentheti a következő szakasz bemeneteként adott dokumentumok mennyiségét.

  • $group – Ez végzi a tényleges aggregációt a fent tárgyaltak szerint.

  • $sort – Rendezi a dokumentumokat.

  • $skip – Ezzel egy adott mennyiségű dokumentum esetén előre lehet ugrani a dokumentumok listájában.

  • $limit – Ezzel az aktuális pozíciókból kiindulva a megadott számmal korlátozza a megtekintendő dokumentumok mennyiségét.

  • $unwind – Ezzel a tömböket használó dokumentumokat lehet kitekerni. Tömb használata esetén az adatok egyfajta előre összekapcsolódnak, és ezt a műveletet ezzel visszacsináljuk, hogy ismét egyedi dokumentumok legyenek. Így ezzel a fázissal növeljük a dokumentumok mennyiségét a következő fázishoz.

Hirdetések

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.