Database Reference
In-Depth Information
Veränderung ist gut
Aggregierte Queries geben eine Struktur zurück, die sich von den einzelnen Doku-
menten unterscheidet, an die wir gewöhnt sind. count aggregiert das Ergebnis in
eine Anzahl von Dokumenten, distinct in ein Array mit Ergebnissen und group gibt
Dokumente eigenen Designs zurück. Selbst Mapreduce betreibt einigen Aufwand,
um Objekte abzurufen, die Ihren intern gespeicherten Dokumenten ähneln.
Um die Leistungsfähigkeit der folgenden aggregierenden Queries sehen zu
können, wollen wir weitere 100000 Telefonnummern in unsere phones -Col-
lection einfügen, diesmal aber mit einer anderen Vorwahl.
populatePhones( 855, 5550000, 5650000 )
Der Befehl distinct() gibt alle passenden Werte zurück (nicht das gesamte Do-
kument), für die ein oder mehrere Treffer existieren. Die eindeutigen Kom-
ponentennummern kleiner als 5550005 können wir wie folgt bestimmen:
db.phones.distinct( 'components.number' ,{ 'components.number' : { $lt : 5550005 } })
[ 5550000, 5550001, 5550002, 5550003, 5550004 ]
Obwohl es 5550000 zweimal gibt (einmal für die Vorwahl 800 und einmal für
855), taucht sie in dieser Liste nur einmal auf.
Die Aggregat-Query group ähnelt dem GROUP BY von SQL. Sie ist auch die
komplexeste der elementaren Mongo-Queries. Wir können alle Telefonnum-
mern über 5599999 in verschiedenen Buckets speichern, gruppiert nach
Vorwahlen. key ist das Feld, über das wir gruppieren wollen, cond (condition,
Bedingung) ist der Wertebereich, an dem wir interessiert sind, und reduce
verlangt eine Funktion, die festlegt, wie die Werte ausgegeben werden.
Erinnern Sie sich an das Mapreduce aus dem Riak-Kapitel? Unsere Daten
sind in der vorhandenen Collection von Dokumenten bereits ge mapped .Ein
Mapping ist also nicht mehr nötig, wir müssen nur noch das Reduce durch-
führen.
db.phones.group({
initial: { count:0 },
reduce: function (phone, output) { output.count++; },
cond:
{ 'components.number' : { $gt : 5599999 } },
key:
{ 'components.area' : true }
})
[{ "800" : 50000, "855" : 50000 } ]
 
Search WWH ::




Custom Search