Agregacions
MongoDB et permet realitzar diverses operacions d'agregació que et permeten processar els registres de dades de diverses maneres, com ara agrupar dades, ordenar les dades en un ordre específic o reestructurar els documents retornats, així com filtrar les dades com es podria fer amb una consulta.
Introducció
MongoDB ofereix operacions d’agregació mitjançant “pipelines” d’agregació : una sèrie d’operacions que processen documents de dades de manera seqüencial.
Les “pipelines” d’agregació es construeixen com una sèrie seqüencial d’operacions declaratives de processament de dades conegudes com a etapes . Cada etapa inspecciona i transforma els documents a mesura que passen per la pipeline (canonada), alimentant els resultats transformats a les etapes posteriors per a un processament posterior.
Els documents d’una col·lecció escollida entren al pipeline i passen per cada etapa, on la sortida procedent d’una etapa constitueix l’entrada per a la següent i el resultat final arriba al final del pipeline.
Les etapes poden realitzar operacions sobre dades com ara:
- Filtrar. S’assembla a les consultes, on la llista de documents es redueix a través d’un conjunt de criteris
- Ordenar. Pots reordenar els documents en funció d’un camp escollit
- Transformar. La possibilitat de canviar l’estructura dels documents significa que podeu eliminar o canviar el nom de determinats camps, o potser canviar el nom o agrupar camps dins d’un document incrustat per a la seva llegibilitat.
- Agrupar. També pots processar diversos documents junts per formar un resultat resumit.
Les etapes de pipeline no necessiten produir el mateix nombre de documents que reben.
Agregació
A continuació inserta un conjunt de dades a la col.lecció cities:
test> db.cities.drop()
test > db.cities.insertMany([
{"name": "Seoul", "country": "South Korea", "continent": "Asia", "population": 25.674 },
{"name": "Mumbai", "country": "India", "continent": "Asia", "population": 19.980 },
{"name": "Lagos", "country": "Nigeria", "continent": "Africa", "population": 13.463 },
{"name": "Beijing", "country": "China", "continent": "Asia", "population": 19.618 },
{"name": "Shanghai", "country": "China", "continent": "Asia", "population": 25.582 },
{"name": "Osaka", "country": "Japan", "continent": "Asia", "population": 19.281 },
{"name": "Cairo", "country": "Egypt", "continent": "Africa", "population": 20.076 },
{"name": "Tokyo", "country": "Japan", "continent": "Asia", "population": 37.400 },
{"name": "Karachi", "country": "Pakistan", "continent": "Asia", "population": 15.400 },
{"name": "Dhaka", "country": "Bangladesh", "continent": "Asia", "population": 19.578 },
{"name": "Rio de Janeiro", "country": "Brazil", "continent": "South America", "population": 13.293 },
{"name": "São Paulo", "country": "Brazil", "continent": "South America", "population": 21.650 },
{"name": "Mexico City", "country": "Mexico", "continent": "North America", "population": 21.581 },
{"name": "Delhi", "country": "India", "continent": "Asia", "population": 28.514 },
{"name": "Buenos Aires", "country": "Argentina", "continent": "South America", "population": 14.967 },
{"name": "Kolkata", "country": "India", "continent": "Asia", "population": 14.681 },
{"name": "New York", "country": "United States", "continent": "North America", "population": 18.819 },
{"name": "Manila", "country": "Philippines", "continent": "Asia", "population": 13.482 },
{"name": "Chongqing", "country": "China", "continent": "Asia", "population": 14.838 },
{"name": "Istanbul", "country": "Turkey", "continent": "Europe", "population": 14.751 }
])Important!. La població està expressada en milions d’habitants (en número decimal) 🫡
$match
Per crear un pipeline d’agregació pots utilitzar el mètode aggregate() que utilitza una sintaxi que és força semblant al mètode find() que s’utilitza per consultar dades d’una col·lecció.
$match s’utilitza per reduir la llista de documents en qualsevol pas donat d’una “pipeline” i es pot utilitzar per assegurar que totes les operacions posteriors s’executen en una llista limitada d’entrades.
L’operació que es mostra a continuació construeix una pipeline d’agregació utilitzant una sola etapa $match sense cap consulta de filtratge en particular:
test> db.cities.aggregate([
... { $match: {} }
... ])
[
{
_id: ObjectId('678a9770522f6dfeb6cb0ce2'),
name: 'Seoul',
country: 'South Korea',
continent: 'Asia',
population: 25.674
},
...You're reading a preview.
Sign in to read the full article. Any account opens 10 free articles a month; students and teachers read their course pages without limit.
Sign in