MongoDB Polymerisation
MongoDB polymerisiert (Aggregat) vor allem für die Verarbeitung der Daten (wie zum Beispiel statistische Mittelwerte, Summen, etc.), und gibt das Ergebnis der berechneten Daten. Etwas ähnlich SQL-Anweisung count (*).
Aggregat () Methode
MongoDB Polymerisationsverfahren verwendet Aggregat ().
Grammatik
Die grundlegende Syntax Aggregat () Methode ist wie folgt:
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
Beispiele
Datensammlung ist wie folgt:
{ _id: ObjectId(7df78ad8902c) title: 'MongoDB Overview', description: 'MongoDB is no sql database', by_user: 'w3cschool.cc', url: '', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }, { _id: ObjectId(7df78ad8902d) title: 'NoSQL Overview', description: 'No sql database is very fast', by_user: 'w3cschool.cc', url: '', tags: ['mongodb', 'database', 'NoSQL'], likes: 10 }, { _id: ObjectId(7df78ad8902e) title: 'Neo4j Overview', description: 'Neo4j is no sql database', by_user: 'Neo4j', url: 'http://www.neo4j.com', tags: ['neo4j', 'database', 'NoSQL'], likes: 750 },
Nun setzen wir über die für jede der Anzahl der Artikel geschrieben von Autoren berechnet wird Aggregat () wie folgt berechnet:
> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]) { "result" : [ { "_id" : "w3cschool.cc", "num_tutorial" : 2 }, { "_id" : "Neo4j", "num_tutorial" : 1 } ], "ok" : 1 } >
Ähnliche Beispiele oben SQL - Anweisung: select by_user, count (*) aus mycol Gruppe von by_user
In dem obigen Beispiel by_user wir Feld für Feld zu gruppieren, die Daten und berechnet die Summe aus dem gleichen Wert by_user Feld.
Die folgende Tabelle zeigt einige Aggregations Ausdruck:
Ausdruck | Beschreibung | Beispiele |
---|---|---|
$ Sum | Berechnen Sie die Summe. | db.mycol.aggregate ([{$ group: {_id: "$ by_user", num_tutorial: {$ Summe: "$ mag"}}}]) |
$ Avg | Die Berechnung der durchschnittlichen | db.mycol.aggregate ([{$ group: {_id: "$ by_user", num_tutorial: {$ avg: "$ mag"}}}]) |
$ Min | Ruft eine Auflistung aller Dokumente im Wert von mindestens entsprechen. | db.mycol.aggregate ([{$ group: {_id: "$ by_user", num_tutorial: {$ min: "$ mag"}}}]) |
$ Max | Ruft eine Auflistung aller Dokumente zu dem maximalen Wert entspricht. | db.mycol.aggregate ([{$ group: {_id: "$ by_user", num_tutorial: {$ max: "$ mag"}}}]) |
$ Drücken | In dem resultierenden Dokument einen Wert in ein Feld einzufügen. | db.mycol.aggregate ([{$ group: {_id: "$ by_user", URL: {$ Push: "$ url"}}}]) |
$ AddToSet | In dem resultierenden Dokument einen Wert in ein Array eingefügt werden, aber schafft keine Kopie. | db.mycol.aggregate ([{$ group: {_id: "$ by_user", URL: {$ addToSet: "$ url"}}}]) |
$ Erste | Als die ersten Dokumentdaten gemäß den Sortier Ressource Dokumente. | db.mycol.aggregate ([{$ group: {_id: "$ by_user", first_url: {$ first: "$ url"}}}]) |
$ Last | Ruft die letzte Dokumentdaten entsprechend der Art Ressource Dokumente | db.mycol.aggregate ([{$ group: {_id: "$ by_user", last_url: {$ zuletzt: "$ url"}}}]) |
Das Konzept der Pipeline
Rohre in Unix und Linux im allgemeinen wird die Ausgabe des Strombefehls als einen Parameter auf den nächsten Befehl verwendet wird.
MongoDB MongoDB Dokument polymere Rohr im Rohr nach einem verarbeiteten Ergebnis auf die nächste Pipeline-Verarbeitung. Pipeline-Operation kann wiederholt werden.
Expression: Verarbeiten von Eingabe- und Ausgabedokumente. Ausdrücke staatenlos sind, können nur die aktuellen Pipeline von aggregierten Dokumente zur Berechnung verwendet werden, können Sie nicht mit anderen Dokumenten beschäftigen.
Hier stellen wir die Aggregation Rahmen häufig in mehreren Operationen verwendet:
- $ Projekt: Ändern Sie die Struktur des Eingabedokuments. Kann verwendet werden, Felder umbenennen, hinzufügen oder entfernen, es kann auch verwendet werden, verschachtelte Berechnungen und Dokumentation zu erstellen.
- $ Match: verwendet, um Daten zu filtern, nur die Ausgabe von qualifizierten Dokumente. $ Spiel MongoDB Standardabfrageoperatoren verwenden.
- $ Limit: die Anzahl der Dokumente MongoDB Polymerisation Pipeline zurück zu begrenzen.
- Überspringen Sie die angegebene Anzahl von Dokumenten in der Polymerisation Pipeline und gibt den Rest des Dokuments: $ überspringen.
- $ Unwind: ein Dokument in einer Reihe von Typ-Feld in mehrere aufgeteilt, wobei jedes Feld einen Wert enthält.
- $ Gruppen: die Sammlung von Dokumenten Gruppierung kann für statistische Ergebnisse verwendet werden.
- $ Sortieren: das Eingabedokument Ausgabe nach der Bestellung.
- $ GeoNear: Bestelldokumentenausgabe der Nähe einer geographischen Lage.
Beispiele für die Pipeline-Betreiber
1, $ Projektbeispiele
db.article.aggregate( { $project : { title : 1 , author : 1 , }} );
In diesem Fall wird nur dort die Ergebnisse würden _id, tilte und Autor von drei Feldern, die Standard _id Feld aufgenommen zu werden, wenn der Auftrag, wenn es sein kann, enthalten nicht _ID:
db.article.aggregate( { $project : { _id : 0 , title : 1 , author : 1 }});
2. $ passen Beispiele
db.articles.aggregate( [ { $match : { score : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } } ] );
$ Spiel wird eine Punktzahl von mehr als 70 zu erhalten, ist weniger als oder gleich 90 Datensätze, dann sind die entsprechenden Datensätze in die nächste Stufe der Pipeline-Betreiber $ Gruppe für die Verarbeitung.
3. $ überspringen Instanz
db.article.aggregate( { $skip : 5 });
Nach einer Verarbeitung Pipeline-Betreiber $ skip werden die ersten fünf Dokumente "gefiltert" werden.