Baza została pobrana w formacie CSV i została oczyszczona za pomocą google refine. Baze danych pobralem ze strony: http://openstates.org/downloads/ dla miasta NY w USA.
Sprawdzenie liczby rekordów:
C:\mongodb\bin>mongo
MongoDB shell version: 2.4.7
connecting to: test
> use votes
switched to db votes
> db.vote.count()
886182
Przykładowy rekord:
> db.vote.findOne()
{
"_id" : ObjectId("52b349e1093c8062d690c84d")
"vote_id" : "NYV00004655",
"leg_id" : "NYL000025",
"name" : "Johnson",
"vote" : "yes"
}
Funkcja dotycząca imienia i oddanego głosu.
var mapFunction = function() {
emit(this.name, this.vote);
};
Funkcja zliczająca ilość wystąpień słowa "yes".
var reduceFunction = function(key, values) {
var yes = 0;
for(i in values) {
if(values[i] === "yes") {
yes++;
}
}
return yes;
};
MapReduce:
var result = db.vote.mapReduce(mapFunction, reduceFunction, {out: {inline: 1}});
5 osób które oddały najwięcej pozytywnych głosów:
> db.map_reduce_example.find().limit(5).sort({value: -1})
{ "_id" : "Duprey", "value" : 2877 }
{ "_id" : "Meng", "value" : 1222 }
{ "_id" : "Fahy", "value" : 1074 }
{ "_id" : "Santaba", "value" : 1046 }
{ "_id" : "DiPietr", "value" : 762 }
Funckja dotycząca okręgu i imienia.
var mapFunction1 = function()
{ emit(this.leg_id,this.name);
};
Funkcja zliczająca posłów w danym okręgu:
> var reduceFunction1 = function(key,values)
{
var ilosc = 0; for(i in values){
ilosc++;
}
return ilosc; };
};
MapReduce2:
> var result = db.vote.mapReduce( mapFunction1, reduceFunction1, {out : "ilosc"} );
Ilość posłów w danym okręgu:
db.ilosc.find().sort({value:-1}).limit(5)
{ "_id" : "NYL000224", "value" : 56 }
{ "_id" : "NYL000029", "value" : 39 }
{ "_id" : "NYL000003", "value" : 37 }
{ "_id" : "NYL000050", "value" : 37 }
{ "_id" : "NYL000012", "value" : 36 }