Obwohl MongoDB für die Gruppierung nicht so praktisch ist wie die Gruppierung nach Funktion unserer häufig verwendeten relationalen Datenbanken wie MySQL, SQLServer, Oracle, bietet MongoDB auch drei Möglichkeiten, eine Gruppierung zu erreichen: * Mongodb drei Gruppierungsmethoden : * 1. Gruppe (zuerst filtern und dann gruppieren, unterstützt kein Sharding, begrenzt die Datenmenge und ist nicht effizient) * 2. Mapreduce (basierend auf der JS-Engine, Single-Threaded-Ausführung, geringe Effizienz, geeignet für Hintergrundstatistiken usw.) * 3. Aggregat (empfohlen) (Wenn Ihre PHP-Mongodb-Treiberversion >=1.3.0 erfordert, wird die Verwendung von Aggregat empfohlen , das eine höhere Leistung bietet. Es gibt viele und sie sind einfacher zu verwenden, aber 1.3 unterstützt derzeit keinen Kontoauthentifizierungsmodus. Sie können das Update-Protokoll und Fehler über http://pecl.php.net/package/mongo überprüfen 🎜>Hier sind die folgenden Werfen Sie einen Blick auf die Mapreduce-Methode: Die offizielle Website von Mongodb stellt MapReduce vor: Map/reduce in MongoDB ist nützlich für die Stapelverarbeitung von Daten und Aggregationsvorgänge . Es ähnelt im Geiste der Verwendung von etwas wie Hadoop, wobei alle Eingaben aus einer Sammlung stammen und die Ausgaben häufig in eine Sammlung gehen
Wenn Sie GROUP BY in SQL verwenden, ist Map/Reduce das richtige Tool in MongoDB. bedeutet ungefähr: Map/Reduce wird in Mongodb hauptsächlich für die Stapelverarbeitung und Aggregation von Daten verwendet, ähnlich wie bei der Verwendung von Hadoop Wenn Sie Sammlungsdaten verarbeiten, werden alle Eingabedaten aus der Sammlung abgerufen und die nach MapReduce ausgegebenen Daten werden ebenfalls in die Sammlung geschrieben. Normalerweise ähnlich wie wir die Group By-Anweisung in SQL verwenden. Die Verwendung von MapReduce erfordert die Implementierung von zwei Funktionen: Map und Reduce. Die Map-Funktion ruft emit(key, value) auf, um alle Datensätze in der Sammlung zu durchlaufen, und übergibt den Schlüssel und den Wert zur Verarbeitung an die Reduce-Funktion. Kartenfunktionen und Reduzierfunktionen sind in Javascript geschrieben und können MapReduce-Vorgänge über db.runCommand- oder Mapreduce-Befehle ausführen. Der MapReduce-Befehl lautet wie folgt: db.runCommand(
{ mapreduce : <collection>,
map : <mapfunction>,
reduce : <reducefunction>
[, query : <queryfilterobject>]
[, sort : <sortthequery.usefulforoptimization>]
[, limit : <numberofobjectstoreturnfromcollection>]
[, out : <output-collectionname>]
[, keeptemp: <true|false>]
[, finalize : <finalizefunction>]
[, scope : <objectwherefieldsgointojavascriptglobalscope >]
[, verbose : true]
}
); Parameter Beschreibung: mapreduce: der zu bedienende Zielsatz map: Mapping-Funktion (erzeugt eine Folge von Schlüssel-Wert-Paaren als Parameter der Reduce-Funktion) Reduzieren: StatistikfunktionAbfrage: ZieldatensatzfilterungSortieren: Zieldatensätze sortierenLimit: Anzahl der Zieldatensätze begrenzenaus: Speicherung statistischer Ergebnisse (falls nicht angegeben) Verwenden Sie temporäre Sammlungen, die automatisch gelöscht werden, nachdem der Client die Verbindung getrennt hat) keeptemp: ob die temporäre Sammlung beibehalten werden soll finalize: Endverarbeitungsfunktion (führt aus). endgültige Sortierung nach den Ergebnissen der Reduzierungsrückgabe und Speicherung im Ergebnissatz) Umfang: Externe Variablen zum Zuordnen, Reduzieren und Finalisieren importieren Ausführlich: Detaillierte Zeitstatistiken anzeigen Map-Funktion Die Map-Funktion ruft das aktuelle Objekt auf, verarbeitet die Attribute des Objekts und übergibt den zu reduzierenden Wert. Die Map-Methode verwendet dies zum Betrieb das aktuelle Objekt und ruft die Methode „emit(key, value)“ mindestens einmal auf, um den zu reduzierenden Wert zu übergeben. Geben Sie Parameter an, wobei der Schlüssel von „emit“ die ID der endgültigen Daten ist. reduce函数 接收一个值和数组,根据需要对数组进行合并分组等处理,reduce的key就是emit(key,value)的key,value_array是同个key对应的多个value数组。 Finalize函数 此函数为可选函数,可在执行完map和reduce后执行,对最后的数据进行统一处理。 看完基本介绍,我们再来看一个实例:已知集合feed,测试数据如下:{
"_id": ObjectId("50ccb3f91e937e2927000004"),
"feed_type": 1,
"to_user": 234,
"time_line": "2012-12-16 01:26:00"
}{
"_id": ObjectId("50ccb3ef1e937e0727000004"),
"feed_type": 8,
"to_user": 123,
"time_line": "2012-12-16 01:26:00"
}{
"_id": ObjectId("50ccb3e31e937e0a27000003"),
"feed_type": 1,
"to_user": 123,
"time_line": "2012-12-16 01:26:00"
}{
"_id": ObjectId("50ccb3d31e937e0927000001"),
"feed_type": 1,
"to_user": 123,
"time_line": "2012-12-16 01:26:00"
} 我们按动态类型feed_type和用户to_user进行分组统计,实现结果:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn