Hogyan lehet elemezni és szűrni az adatbázisokat a MongoDB összesítésével?
Az MongoDB-ben az összesítés értékes eszköz az adatbázisok elemzéséhez és szűréséhez. A pipeline rendszer lehetővé teszi a lekérdezések megadását, így rendkívül testreszabott eredményeket kaphatunk.
Mi az aggregáció a MongoDB-ben?
A MongoDB egy nem relációs, dokumentumorientált adatbázis, amelyet nagy és változatos adatmennyiségek kezelésére terveztek. A merev táblák elhagyásával és olyan technikák alkalmazásával, mint a sharding (az adatok különböző csomópontokon való tárolása), a NoSQL megoldás horizontálisan skálázható, miközben rendkívül rugalmas és ellenálló marad a meghibásodásokkal szemben.
A bináris JSON formátumú BSON dokumentumok gyűjteményekbe vannak csomagolva, és a MongoDB Query Language (MQL) segítségével lekérdezhetők és szerkeszthetők. Bár ez a nyelv számos lehetőséget kínál, nem alkalmas (vagy talán nem elég alkalmas) az adatelemzéshez. Ezért biztosítja a MongoDB az összesítést.
Az informatika területén ez a kifejezés különböző folyamatokra utal. A MongoDB-ben az aggregáció az adatok elemzését és összefoglalását jelenti, amelynek során különböző műveletekkel egyetlen, egyértelmű eredményt kapunk. Ez a folyamat során egy vagy több dokumentum adatai kerülnek elemzésre és szűrésre a felhasználó által megadott tényezők alapján.
A következő szakaszokban nemcsak a MongoDB aggregáció által kínált lehetőségeket vizsgáljuk átfogó adatelemzéshez, hanem példákat is bemutatunk arra, hogyan használhatja a aggregate ( ) módszert egy adatbázis-kezelő rendszerrel.
Mire van szükségem a MongoDB összesítéséhez?
A MongoDB-ben az aggregáció használatához csak néhány követelménynek kell megfelelni. A módszer a shellben fut, és logikai szabályok szerint működik, amelyeket az elemzés igényeihez igazíthat.
Ahhoz, hogy az összesítést használni tudd a Mongo DB-ben, a MongoDB-nek már telepítve kell lennie a számítógépeden. Ha még nincs, akkor a MongoDB átfogó bemutatójában megtudhatod, hogyan töltheted le, telepítheted és futtathatod az adatbázist.
Használjon továbbá egy hatékony tűzfalat, és győződjön meg arról, hogy adatbázisa minden jelenlegi biztonsági szabványnak megfelel. Az összesítés futtatásához a MongoDB-ben rendszergazdai jogokkal kell rendelkeznie.
Az adatbázis minden platformon működik, így az alábbiakban leírt lépések minden operációs rendszerre vonatkoznak.
Mi az a pipeline a MongoDB aggregációs keretrendszerben?
A MongoDB-ben egyszerű kereséseket vagy lekérdezéseket hajthat végre, és az adatbázis azonnal megjeleníti az eredményeket. Ez a módszer azonban nagyon korlátozott, mivel csak a tárolt dokumentumokban már meglévő eredményeket tudja megjeleníteni. Ez a típusú lekérdezés nem alkalmas mélyreható elemzésekre, ismétlődő minták felismerésére vagy további információk levezetésére.
Néha egy adatbázis különböző forrásait is figyelembe kell venni ahhoz, hogy értelmes következtetéseket lehessen levonni. Ilyen helyzetekben a MongoDB aggregációt használják. Az ilyen eredmények elérése érdekében a aggregate ( ) módszer csővezetékeket használ.
A csővezeték szerepe
A MongoDB aggregációs csővezetékei olyan folyamatok, amelyekben a meglévő adatokat különböző lépések segítségével elemzik és szűrik, hogy a felhasználók számára a kívánt eredményt jelenítsék meg. Ezeket a lépéseket szakaszoknak nevezik. A követelményektől függően egy vagy több szakasz indítható el. Ezek egymás után futnak le, és megváltoztatják az eredeti bemeneti adatokat, hogy a végén a kimeneti adatok (a keresett információk) megjelenjenek.
Míg a bemenet számos adatból áll, a kimenet (azaz a végeredmény) egyetlen. A MongoDB összesítésének különböző szakaszait később, ebben a szakaszban magyarázzuk el.
A MongoDB összesítő csővezeték szintaxisa
Először érdemes röviden áttekinteni az aggregáció szintaxisát a MongoDB-ben. A módszer mindig ugyanazon formátum szerint van felépítve, és az egyedi követelményekhez igazítható. Az alapszerkezet a következőképpen néz ki:
db.collection_name.aggregate ( pipeline, options )shellItt collection_name a kérdéses gyűjtemény neve. A MongoDB összesítésének szakaszai pipeline alatt vannak felsorolva. options további opcionális paraméterekhez használható, amelyek meghatározzák a kimenetet.
A csővezeték építésének szakaszai
A MongoDB-ben számos szakasz létezik az aggregációs folyamatban. Legtöbbjük többször is felhasználható egy folyamaton belül. Az összes lehetőség felsorolása meghaladná e cikk kereteit, különösen mivel néhányuk csak nagyon speciális műveletekhez szükséges. Azonban, hogy képet kapjon a szakaszokról, itt felsorolunk néhányat a leggyakrabban használtak közül:
$count: Ez a szakasz jelzi, hogy hány BSON-dokumentumot vettek figyelembe a folyamatban lévő szakaszban vagy szakaszokban.$group: Ez a szakasz bizonyos paraméterek szerint rendezi és csomagolja a dokumentumokat.$limit: Korlátozza a folyamat következő szakaszába továbbított dokumentumok számát.$match: A $match szakasszal korlátozza a következő szakaszban felhasznált dokumentumok számát.$out: Ez a szakasz a MongoDB összesítés eredményeinek a gyűjteménybe való felvételére szolgál. Ez a szakasz csak a folyamat végén használható.$project: A $project segítségével kiválaszthatja a gyűjteményből a kívánt mezőket.$skip: Ez a szakasz egy bizonyos számú dokumentumot figyelmen kívül hagy. Ezt egy opcióval adhatja meg.$sort: Ez a művelet a felhasználó gyűjteményében található dokumentumokat rendezi. A dokumentumok azonban ezen túl nem változnak.$unset: A $unset kizár bizonyos mezőket. Ez a $project műveletével ellentétes.
Példa az összesítésre a MongoDB-ben
Annak érdekében, hogy jobban megértsd, hogyan működik az aggregáció a MongoDB-ben, bemutatunk néhány példát a különböző szakaszokra és azok használatára. A MongoDB aggregáció használatához nyisd meg a shellt rendszergazdaként. Általában először egy teszt adatbázis jelenik meg. Ha más adatbázist szeretnél használni, használd a use parancsot.
Ehhez a példához képzeljünk el egy adatbázist, amely egy adott terméket megvásárló ügyfelek adatait tartalmazza. Az egyszerűség kedvéért ez az adatbázis mindössze tíz dokumentumot tartalmaz, amelyek mindegyike azonos felépítésű:
{
"name" : "Smith",
"city" : "Glasgow",
"country" : "Scotland",
"quantity" : 14
}shellA következő információkat tartalmazza az ügyfelekről: nevüket, lakóhelyüket, országukat és a megvásárolt termékek számát.
Ha szeretné kipróbálni az összesítést a MongoDB-ben, akkor a insertMany ( ) módszerrel hozzáadhatja az összes ügyféladatokat tartalmazó dokumentumot a „customers” nevű gyűjteményhez:
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 }
] )shellMegjelenik az egyes dokumentumok objektumazonosítóinak listája.
A $match használata
A MongoDB-ben elérhető összesítési lehetőségek bemutatásához először a $match szakaszt alkalmazzuk a „customers” gyűjteményre. További paraméterek nélkül ez egyszerűen a fent felsorolt ügyféladatok teljes listáját adná ki.
A következő példában azonban úgy állítottuk be, hogy csak az olaszországi ügyfeleket mutassa meg nekünk. Íme a parancs:
db.customers.aggregate ( [
{ $match : { "country" : "Italy" } }
] )shellMostantól csak az olaszországi két ügyfél objektumazonosítóit és adatait fogja látni.
A jobb áttekinthetőség érdekében használja a $sort parancsot.
Ha szeretné rendezni ügyféladatbázisát, használhatja a $sort szakaszt. A következő példában utasítjuk a rendszert, hogy rendezze az összes ügyféladatot a megvásárolt egységek száma szerint, a legmagasabb számmal kezdve. A bevitel így néz ki:
db.customers.aggregate ( [
{ $sort : { "quantity" : -1 } }
] )shellKorlátozza a kimenetet a $project paranccsal
Az eddig használt szakaszokkal láthatja, hogy a kimenet viszonylag kiterjedt. Például a dokumentumokban szereplő tényleges információk mellett az objektumazonosító is mindig kimenetként megjelenik. A MongoDB összesítő csővezetékében a $project parancs segítségével meghatározhatja, hogy mely információkat kell kimenetként megjeleníteni. Ehhez a kötelező mezők értékét 1-re, a kimenetben nem szükséges mezők értékét pedig 0-ra állítjuk. Példánkban csak az ügyfél nevét és a megvásárolt termékek számát szeretnénk látni. Ehhez a következőket írjuk be:
db.customers.aggregate ( [
{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
] )shellTöbb szakasz kombinálása összesítéssel a MongoDB-ben
A MongoDB összesítésével több lépést is egymás után végrehajthat. Ezek egymás után futnak le, és a végén egy olyan kimenet jön létre, amely figyelembe veszi az összes kívánt paramétert. Ha például csak a skót ügyfelek nevét és vásárlásait szeretné csökkenő sorrendben megjeleníteni, a fent leírt lépéseket a következőképpen használhatja:
db.customers.aggregate ( [
{ $match : { "country" : "Scotland" } }
{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
{ $sort : { "quantity" : -1 } }
] )shell