Samlinger operasjoner prosessdata poster og returnerer beregnede resultater. Aggregering operasjoner gruppe verdier fra flere dokumenter sammen, og kan utføre en rekke operasjoner på de grupperte data å gi et entydig resultat. I SQL count (*) og med gruppen ved en tilsvarende mongodb aggregering.
Samle () Metode
For aggregering mongodb bør du bruke aggregat ()
metoden
syntax.
Basic syntaks av aggregat ()
metoden er som følger
> db.COLLECTION_NAME.aggregate (AGGREGATE_OPERATION)
Eksempel:
i samlingen du har følgende data: product: {_id: Objekt (7df78ad8902c) tittel: «MongoDB oversikt ', beskrivelse:' MongoDB er ingen sql database ', by_user:' tutorials point", url : 'http://www.tutorialspoint.com', tags: [ 'mongodb', 'database', 'NoSQL'], liker: 100}, {_id: Objekt (7df78ad8902d) tittel: «NoSQL oversikt ', beskrivelse: «Nei sql database er svært rask", by_user: 'tutorials point ", url:' http://www.tutorialspoint.com ', tags: [' mongodb ',' database ',' NoSQL '], liker: 10} {_id: Objekt (7df78ad8902e) tittel: «Neo4j oversikt ', beskrivelse:' Neo4j er ingen sql database ', by_user:' Neo4j ', url:' http://www.neo4j.com ', tags: [' neo4j ',' database ',' NoSQL '], liker: 750}
Men fra den ovenfor samling hvis du vil vise en liste som hvor mange tutorials er skrevet av hver bruker vil du bruke aggregat ()
metode som vist nedenfor:
> db.mycol.aggregate ([{$ gruppe: {_id: "$ by_user", num_tutorial: {$ sum: 1}}}]) { "resultatet": [{ "_id": "tutorials point", "num_tutorial": 2}, { "_id": "Neo4j", "num_tutorial": 1}], "ok": 1}>
SQL tilsvarende spørring for ovennevnte bruk saken vil bli velg by_user, teller (*) fra Mycol gruppe av by_user
i eksempelet over har vi gruppert dokumenter ved feltet by_user
og på hver forekomst av by_user forrige verdien av summen økes. . Det er en liste tilgjengelige aggregering uttrykk
Expression
Beskrivelse
$ sumSums opp den definerte verdien fra alle dokumenter i collection.db.mycol.aggregate ([{$ gruppe: {_id: "$ by_user", num_tutorial: {$ sum: "$ liker"}}}]) $ avgCalculates gjennomsnittet av alle gitte verdier fra alle dokumenter i collection.db.mycol.aggregate ([{$ gruppe: { _id: "$ by_user", num_tutorial: {$ avg: "$ liker"}}}]) $ minGets den minste av de tilsvarende verdier fra alle dokumenter i collection.db.mycol.aggregate ([{$ gruppe: {_id : "$ by_user", num_tutorial: {$ min: "$ liker"}}}]) $ maxGets det maksimale av de tilsvarende verdier fra alle dokumenter i collection.db.mycol.aggregate ([{$ gruppe: {_id: "$ by_user", num_tutorial: {$ max: "$ liker"}}}]) $ pushInserts verdien til en matrise i den resulterende document.db.mycol.aggregate ([{$ gruppe: {_id: "$ by_user" , url: {$ trykk: "$ url"}}}]) $ addToSetInserts verdien til en matrise i sluttdokumentet, men skaper ikke duplicates.db.mycol.aggregate ([{$ gruppe: {_id: "$ by_user ", url: {$ addToSet:" $ url "}}}]) $ firstGets den første dokument fra kildedokumentene i henhold til grupperingen. Vanligvis dette bare er fornuftig sammen med noen tidligere søkt "$ sort" -stage.db.mycol.aggregate ([{$ gruppe: {_id: "$ by_user", first_url: {$ først: "$ url"}}}] ) $ lastGets siste dokumentet fra kildedokumentene i henhold til grupperingen. Vanligvis dette bare er fornuftig sammen med noen tidligere søkt "$ sort" -stage.db.mycol.aggregate ([{$ gruppe: {_id: "$ by_user", last_url: {$ sist: "$ url"}}}] )
Pipeline Concept
i UNIX kommandoskall rørledning betyr muligheten til å utføre en operasjon på noen innspill og bruke resultatet som innspill til neste kommando og så videre. MongoDB støtter også samme konseptet i aggregering rammeverk. Det er et sett av mulige trinn, og hver av disse tas et sett av dokumenter som en inngang og produserer et resulterende sett av dokumenter (eller den endelige resulterende JSON dokument ved enden av rørledningen). Dette kan så i sin tur igjen kan brukes for neste trinn en så videre
Mulige stadier i aggregering rammeverk som følger:.
Brukes til å velge noen spesifikke felt fra en samling
$ kamp:..
dette er en filtrering drift og dermed kan dette redusere mengden av dokumenter som er gitt som innspill til neste stadium
$ gruppe:
Dette gjør selve aggregering som omtalt ovenfor
$ slags..
Sorterer dokumentene
$ hoppe:
med denne er det mulig å hoppe fremover i listen over dokumenter for en gitt mengde dokumenter
$ grense.
dette begrenser mengden av dokumenter å se på med tallet fra dagens position.s
$ stresse:
Dette brukes til å slappe av dokument som bruker arrays. ved bruk av en rekke data er slags pre-joinded og denne operasjonen vil omgjøres med dette å ha enkeltdokumenter på nytt. Dermed med denne fasen vil vi øke mengden av dokumenter for neste fase.