Database Reference
In-Depth Information
mongo/distinct_digits.js
distinctDigits = function (phone){
var
number = phone.components.number + '' ,
seen = [],
result = [],
i = number.length;
while (i-) {
seen[+number[i]] = 1;
}
for (i=0; i<10; i++) {
if (seen[i]) {
result[result.length] = i;
}
}
return result;
}
db.system.js.save({ _ id: 'distinctDigits' , value: distinctDigits})
Laden Sie die Datei in die mongo -Kommandozeile. Wenn die Datei im gleichen
Verzeichnis liegt, in dem Sie mongo gestartet haben, müssen Sie nur den Da-
teinamen angeben, anderenfalls wird der vollständige Pfad benötigt.
> load( 'distinct _ digits.js' )
Nachdem das erledigt ist, können Sie einen kurzen Test durchführen (wenn
es Probleme gibt, sollten Sie sich nicht scheuen, einige print -Funktionen
einzustreuen).
db.eval( "distinctDigits(db.phones.findOne({ 'components.number' : 5551213 }))" )
[1,2,3,5]
Nun können wir am Mapper arbeiten. Wie bei jeder Mapreduce-Funktion ist
die wichtigste Entscheidung, welche Felder abgebildet werden sollen, da das
die zurückgegebenen aggregierten Werte bestimmt. Da unser Bericht eindeu-
tige Nummern zurückgibt, ist das Array eindeutiger Werte ein Feld. Doch weil
wir auch das Land abfragenmüssen, ist dies ein weiteres Feld. Wir verwenden
beide Werte als zusammengesetzten Schlüssel: {digits : X, country : Y} .
Unser Ziel besteht einfach darin, diese Werte zu zählen, d. h., wir emittie-
ren einfach den Wert 1 (jedes Dokument ist ein zu zählendes Element). Die
Aufgabe des Reducers besteht darin, die ganzen Einsen zu addieren.
mongo/map_1.js
map = function () {
var digits = distinctDigits( this );
emit({digits : digits, country : this .components.country}, {count : 1});
}
 
Search WWH ::




Custom Search