Type to search…

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