Heim Datenbank MySQL-Tutorial MongoDB学习之旅十二:MongoDBMapReduce

MongoDB学习之旅十二:MongoDBMapReduce

Jun 07, 2016 pm 03:55 PM
mongodb 学习

MongDB的MapReduce相当于MySQL中的group by,所以在MongoDB上使用Map/Reduce进行并行统计很容易。 使用MapReduce要实现两个函数Map函数和Reduce函数,Map函数调用emit(key,value),遍历collection中的所有记录,将key和value传递给Reduce函数进行处理。Map函

MongDB的MapReduce相当于MySQL中的“group by”,所以在MongoDB上使用Map/Reduce进行并行“统计”很容易。

使用MapReduce要实现两个函数Map函数和Reduce函数,Map函数调用emit(key,value),遍历collection中的所有记录,将key和value传递给Reduce函数进行处理。Map函数和Reduce函数可以使用JS来实现,可以通过db.runCommand或mapReduce命令来执行一个MapReduce操作。

示例shell

db.runCommand(
{ mapreduce : <collection>,
map : <mapfunction>,
reduce : <reducefunction>
[, query : <query filter object>]
[, sort : <sorts the input objects using this key. Useful for optimization, like sorting by the
emit key for fewer reduces>]
[, limit : <number of objects to return from collection>]
[, out : <see output options below>]
[, keeptemp: <true|false>]
[, finalize : <finalizefunction>]
[, scope : <object where fields go into javascript global scope >]
[, verbose : true]
}
);
Nach dem Login kopieren
参数说明:
 mapreduce: 要操作的目标集合。
 map: 映射函数 (生成键值对序列,作为 reduce 函数参数)。
 reduce: 统计函数。
 query: 目标记录过滤。
 sort: 目标记录排序。
 limit: 限制目标记录数量。
 out: 统计结果存放集合 (不指定则使用临时集合,在客户端断开后自动删除)。
 keeptemp: 是否保留临时集合。
 finalize: 最终处理函数 (对 reduce 返回结果进行最终整理后存入结果集合)。
 scope: 向 map、reduce、finalize 导入外部变量。
 verbose: 显示详细的时间统计信息。

下面我们准备数据以备后面示例所需

> db.students.insert({classid:1, age:14, name:&#39;Tom&#39;})
> db.students.insert({classid:1, age:12, name:&#39;Jacky&#39;})
> db.students.insert({classid:2, age:16, name:&#39;Lily&#39;})
> db.students.insert({classid:2, age:9, name:&#39;Tony&#39;})
> db.students.insert({classid:2, age:19, name:&#39;Harry&#39;})
> db.students.insert({classid:2, age:13, name:&#39;Vincent&#39;})
> db.students.insert({classid:1, age:14, name:&#39;Bill&#39;})
> db.students.insert({classid:2, age:17, name:&#39;Bruce&#39;})
>
Nach dem Login kopieren
现在我们演示如何统计1班和2班的学生数量

Map 函数必须调用 emit(key, value) 返回键值对,使用 this 访问当前待处理的 Document。

这里this一定不能忘了!!!

> m = function() { emit(this.classid, 1) }
function () {
emit(this.classid, 1);
}
>
Nach dem Login kopieren
value 可以使用 JSON Object 传递 (支持多个属性值)。例如:
emit(this.classid, {count:1})
Reduce 函数接收的参数类似 Group 效果,将 Map 返回的键值序列组合成 { key, [value1,value2, value3, value...] } 传递给 reduce。
> r = function(key, values) {
... var x = 0;
... values.forEach(function(v) { x += v });
... return x;
... }
function (key, values) {
var x = 0;
values.forEach(function (v) {x += v;});
return x;
}
>
Nach dem Login kopieren
Reduce 函数对这些 values 进行 "统计" 操作,返回结果可以使用 JSON Object。

结果如下:

> res = db.runCommand({
... mapreduce:"students",
... map:m,
... reduce:r,
... out:"students_res"
... });
{
"result" : "students_res",
"timeMillis" : 1587,
"counts" : {
"input" : 8,
"emit" : 8,
"output" : 2
},
"ok" : 1
}
> db.students_res.find()
{ "_id" : 1, "value" : 3 }
{ "_id" : 2, "value" : 5 }
>
Nach dem Login kopieren
mapReduce() 将结果存储在 "students_res" 表中。

利用 finalize() 我们可以对 reduce() 的结果做进一步处理。

> f = function(key, value) { return {classid:key, count:value}; }
function (key, value) {
return {classid:key, count:value};
}
>
Nach dem Login kopieren
我们再重新计算一次,看看返回的结果:
> res = db.runCommand({
... mapreduce:"students",
... map:m,
... reduce:r,
... out:"students_res",
... finalize:f
... });
{
"result" : "students_res",
"timeMillis" : 804,
"counts" : {
"input" : 8,
"emit" : 8,
"output" : 2
},
"ok" : 1
}
> db.students_res.find()
{ "_id" : 1, "value" : { "classid" : 1, "count" : 3 } }
{ "_id" : 2, "value" : { "classid" : 2, "count" : 5 } }
>
Nach dem Login kopieren
列名变与 “classid”和”count”了,这样的列表更容易理解。

我们还可以添加更多的控制细节。

> res = db.runCommand({
... mapreduce:"students",
... map:m,
... reduce:r,
... out:"students_res",
... finalize:f,
... query:{age:{$lt:10}}
... });
{
"result" : "students_res",
"timeMillis" : 358,
"counts" : {
"input" : 1,
"emit" : 1,
"output" : 1
},
"ok" : 1
}
> db.students_res.find();
{ "_id" : 2, "value" : { "classid" : 2, "count" : 1 } }
>
Nach dem Login kopieren
可以看到先进行了过滤,只取age
Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Welche Version wird im Allgemeinen für Mongodb verwendet? Welche Version wird im Allgemeinen für Mongodb verwendet? Apr 07, 2024 pm 05:48 PM

Es wird empfohlen, die neueste Version von MongoDB (derzeit 5.0) zu verwenden, da diese die neuesten Funktionen und Verbesserungen bietet. Bei der Auswahl einer Version müssen Sie funktionale Anforderungen, Kompatibilität, Stabilität und Community-Unterstützung berücksichtigen. Die neueste Version verfügt beispielsweise über Funktionen wie Transaktions- und Aggregationspipeline-Optimierung. Stellen Sie sicher, dass die Version mit der Anwendung kompatibel ist. Wählen Sie für Produktionsumgebungen die Langzeit-Support-Version. Die neueste Version bietet eine aktivere Community-Unterstützung.

Der Unterschied zwischen NodeJS und VueJS Der Unterschied zwischen NodeJS und VueJS Apr 21, 2024 am 04:17 AM

Node.js ist eine serverseitige JavaScript-Laufzeitumgebung, während Vue.js ein clientseitiges JavaScript-Framework zum Erstellen interaktiver Benutzeroberflächen ist. Node.js wird für die serverseitige Entwicklung verwendet, beispielsweise für die Entwicklung von Back-End-Service-APIs und die Datenverarbeitung, während Vue.js für die clientseitige Entwicklung verwendet wird, beispielsweise für Single-Page-Anwendungen und reaktionsfähige Benutzeroberflächen.

Wo wird die von mongodb erstellte Datenbank erstellt? Wo wird die von mongodb erstellte Datenbank erstellt? Apr 07, 2024 pm 05:39 PM

Die Daten der MongoDB-Datenbank werden im angegebenen Datenverzeichnis gespeichert, das sich im lokalen Dateisystem, Netzwerkdateisystem oder Cloud-Speicher befinden kann. Der spezifische Speicherort ist wie folgt: Lokales Dateisystem: Der Standardpfad ist Linux/macOS: /data/db, Windows: C:\data\db. Netzwerkdateisystem: Der Pfad hängt vom Dateisystem ab. Cloud-Speicher: Der Pfad wird vom Cloud-Speicheranbieter bestimmt.

Was sind die Vorteile der Mongodb-Datenbank? Was sind die Vorteile der Mongodb-Datenbank? Apr 07, 2024 pm 05:21 PM

Die MongoDB-Datenbank ist für ihre Flexibilität, Skalierbarkeit und hohe Leistung bekannt. Zu seinen Vorteilen gehört: ein Dokumentdatenmodell, das eine flexible und unstrukturierte Speicherung von Daten ermöglicht. Horizontale Skalierbarkeit auf mehrere Server über Sharding. Abfrageflexibilität, Unterstützung komplexer Abfragen und Aggregationsvorgänge. Datenreplikation und Fehlertoleranz sorgen für Datenredundanz und hohe Verfügbarkeit. JSON-Unterstützung für einfache Integration mit Front-End-Anwendungen. Hohe Leistung für schnelle Reaktion auch bei der Verarbeitung großer Datenmengen. Open Source, anpassbar und kostenlos nutzbar.

Was bedeutet Mongodb? Was bedeutet Mongodb? Apr 07, 2024 pm 05:57 PM

MongoDB ist ein dokumentenorientiertes, verteiltes Datenbanksystem zur Speicherung und Verwaltung großer Mengen strukturierter und unstrukturierter Daten. Zu den Kernkonzepten gehören die Speicherung und Verteilung von Dokumenten und zu den Hauptfunktionen gehören dynamische Schemata, Indizierung, Aggregation, Kartenreduzierung und Replikation. Es wird häufig in Content-Management-Systemen, E-Commerce-Plattformen, Social-Media-Websites, IoT-Anwendungen und der Entwicklung mobiler Anwendungen eingesetzt.

So öffnen Sie Mongodb So öffnen Sie Mongodb Apr 07, 2024 pm 06:15 PM

Unter Linux/macOS: Erstellen Sie das Datenverzeichnis und starten Sie den Dienst „mongod“. Unter Windows: Erstellen Sie das Datenverzeichnis und starten Sie den MongoDB-Dienst über den Service Manager. In Docker: Führen Sie den Befehl „docker run“ aus. Auf anderen Plattformen: Bitte konsultieren Sie die MongoDB-Dokumentation. Überprüfungsmethode: Führen Sie den Befehl „mongo“ aus, um eine Verbindung herzustellen und die Serverversion anzuzeigen.

Wo sind die Mongodb-Datenbankdateien? Wo sind die Mongodb-Datenbankdateien? Apr 07, 2024 pm 05:42 PM

Die MongoDB-Datenbankdatei befindet sich im MongoDB-Datenverzeichnis, das standardmäßig /data/db ist und .bson (Dokumentdaten), ns (Sammlungsinformationen), Journal (Schreibvorgangsdatensätze) und wiredTiger (Daten bei Verwendung von WiredTiger) enthält Speicher-Engine) und config (Datenbankkonfigurationsinformationen) und andere Dateien.

Was tun, wenn Navicat abläuft? Was tun, wenn Navicat abläuft? Apr 23, 2024 pm 12:12 PM

Zu den Lösungen zur Behebung von Navicat-Ablaufproblemen gehören: Erneuern der Lizenz; Deaktivieren der automatischen Updates; Wenden Sie sich an den Navicat-Kundendienst.

See all articles