Database Reference
In-Depth Information
Die
group
-Funktion ist, genau wie SQLs
GROUP BY
, mächtig, doch die Mongo-
Implementierung hat auch ihre Kehrseite. Zum einen sind Sie auf ein Ergeb-
nis von 10000 Dokumenten beschränkt. Zum anderen funktioniert
group
nicht, wenn Sie Ihre Mongo-Collection aufteilen (Shardinf, was wir morgen
machen werden). Außerdem gibt es flexiblere Möglichkeiten, Queries aufzu-
bauen. Aus diesem und anderen Gründen tauchen wir gleich in die Mon-
goDB-Version von Mapreduce ein. Doch vorher wollen wir auf die Grenzen
zwischen client- und serverseitigen Befehlen eingehen. Dieser Unterschied
hat erhebliche Konsequenzen für Ihre Anwendungen.
Serverseitige Befehle
Wenn Sie die folgende Funktion in der Kommandozeile (oder über einen Trei-
ber) ausführen, würde der Client jede Telefonnummer, also alle 100000, ab-
rufen, und jedes phone-Dokument, eins nach dem anderen, wieder auf dem
Server speichern.
mongo/update_area.js
update
_
area =
function
() {
db.phones.find().forEach(
function
(phone) {
phone.components.area++;
phone.display =
"+"
+
phone.components.country+
""
+
phone.components.area+
"-"
+
phone.components.number;
db.phone.update({
_
id : phone.
_
id }, phone, false);
}
)
}
Das Mongo
db
-Objektbietetabereinen
eval
-Befehl an, der die angegebene
Funktion an den Server übergibt. Dadurch wird das Geschnatter zwischen
Client und Server drastisch reduziert, weil der Code auf dem Server ausge-
führt wird.
> db.eval(update
_
area)
Neben der Evaluierung von JavaScript-Funktionen gibt es verschiedene an-
dere eingebaute Mongo-Befehle, die auf dem Server ausgeführt werden, auch
wenn einige nur für die admin-Datenbank genutzt werden können (die Sie
über
use admin
auswählen).
> use admin
> db.runCommand(
"top"
)