Database Reference
In-Depth Information
runCommand
Und da wir uns gerade anschauen, wie Methoden funktionieren, wollen wir
auch einen Blick auf die
runCommand
-Funktion werfen.
> db.runCommand
function
(obj) {
if
(
typeof
obj ==
"string"
){
var
n = {};
n[obj] = 1;
obj = n;
}
return this
.getCollection(
"$cmd"
).findOne(obj);
}
Wie sich zeigt, ist
runCommand
ebenfalls ein Wrapper für den Aufruf einer Col-
lection namens
$cmd
. Sie können jeden Befehl ausführen, indem Sie diese
Collection direkt aufrufen.
> db.$cmd.findOne({
'count'
:
'phones'
})
{
"n"
: 100000,
"ok"
:1}
Wir sind ganz tief unten angekommen und sehen, wie Treiber generell mit
dem Mongo-Server kommunizieren.
Umweg
Wir sind diesen Umweg aus zwei Gründen gegangen:
Um Ihnen zu vermitteln, dass ein Großteil der Magie, den Sie in der
mongo
-
Console anstoßen, auf dem Server und nicht dem Client ausgeführt wird.
Der Client stellt nur praktische Wrapper-Funktionen zur Verfügung.
Wir können dieses Konzept der Ausführung serverseitigen Codes auch
zu unserem Vorteil nutzen und bei MongoDB etwas aufbauen, was den
Stored Procedures
von PostgreSQL ähnelt.
Jede JavaScript-Funktion kann in einer speziellen Collection namens
sys-
tem.js
gespeichert werden. Das ist eine ganz normale Collection und Sie
speichern eine Funktion, indem Sie den Namen als
_
id
, und das Funktions-
objekt als
value
verwenden.
> db.system.js.save({
_
id:
'getLast'
,
value:
function
(collection){
return
collection.find({}).sort({
'
_
id'
:1}).limit(1)[0]
}
})