Latest web development tutorials

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: 'http://www.w3cschool.cc',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
},
{
   _id: ObjectId(7df78ad8902d)
   title: 'NoSQL Overview', 
   description: 'No sql database is very fast',
   by_user: 'w3cschool.cc',
   url: 'http://www.w3cschool.cc',
   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.