Database Reference
In-Depth Information
Der
top
-Befehl gibt Details zum Zugriff auf alle Collections des Servers aus.
> use book
> db.listCommands()
Wenn Sie
listCommands()
ausführen, werden Sie viele der von uns genutz-
ten Befehle sehen. Tatsächlich lassen sich viele gängige Befehle über die
runCommand
-Methode ausführen, etwa das Zählen der Telefonnummern, doch
die Ausgabe ist etwas anders.
> db.runCommand({
"count"
:
"phones"
})
{
"n"
: 100000,
"ok"
:1}
Die Zahl (
n
) wird korrekt (100000) zurückgegeben, doch das Objekt enthält
ein
ok
-Feld. Das liegt daran, dass
db.phones.count
eine Wrapper-Funktion
ist, die unserer Bequemlichkeit zuliebe vom JavaScript-Interface der Shell
erzeugt wurde, während
runCommand
den Zähler auf dem Server ausführt.
Erinnern Sie sich daran, dass wir Detektiv spielen und uns die Implementie-
rung von
count
ansehen können, indem wir die Klammern weglassen.
> db.phones.count
function
(x) {
return this
.find(x).count();
}
Interessant!
collection.count
ist nur ein Wrapper für den Aufruf von
count
über die Ergebnisse von
find
(das selbst nur ein Wrapper auf ein natives Que-
ry-Objekt ist, der einen Cursor zurückgibt, der auf das Ergebnis verweist).
Wenn wir uns nun
diese
Query ansehen...
> db.phones.find().count
sehen wir eine viel größere Funktion (zu groß, um sie hier abzubilden). Schaut
man sich den Code an, findet man nach einem ganzen Haufen Setup Zeilen
wie diese:
var
res =
this
.
_
db.runCommand(cmd);
if
(res && res.n != null) {
return
res.n;
}
Sehr interessant!
count
führt
runCommand
aus und gibt den Wert des
n
-Feldes
zurück.