Jak używać Map/Reduce w MongoDB?

Mam problem z tym, jak działa map/reduce w MongoDB. Mam kolekcję z polami: areacode, state, county, zip, city, lat, lon, która wyświetla każdy kod pocztowy w USA wraz z odpowiednim hrabstwem, stanem itp.

Chciałbym móc odpytywać powiedzmy wszystkie powiaty lub miasta w danym stanie. Więc w zasadzie jakieś zapytanie, które szuka wszystkich rekordów, gdzie "State = MI". W tym przypadku zwrócono około 900 rekordów. Jak pogrupować je według powiatu tak, że po prostu dostać 83 powiaty dla tego stanu? Nie chcę używać distinct, ponieważ chciałbym móc je uporządkować w porządku alfabetycznym i ewentualnie wyciągnąć lat / long, jak również.

Jakieś rady, jak używać map/reduce, aby to osiągnąć? Wydaje mi się, że to dość proste, po prostu nie mogę tego rozgryźć.

Author: Adam, 2011-06-13

3 answers

Nie mam żadnego doświadczenia w PHP, ale jeśli chcesz dowiedzieć się, jak działa MongoDB Map-Reduce, możesz to sprawdzić..

Tutaj wpisz opis obrazka

Aby uzyskać więcej informacji, sprawdź to

 44
Author: RameshVel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-09 07:00:19

Jak pogrupować je według hrabstw tak, że dostanę tylko 83 hrabstwa dla tego stanu?

Jak to opisujesz, wymagałoby to odrębnego polecenia .

Nie chcę używać distinct, ponieważ chciałbym móc je uporządkować w porządku alfabetycznym

Polecenie distinct zwróci tablicę wyników. Sortowanie powinno być trywialne, jeśli jeszcze nie zostały posortowane.

... i ewentualnie wyciągnąć lat / długo jak cóż.

Jaką długość/długość chcesz wyciągnąć? Na podstawie schematu, masz lat / long dla miast, ale nie widzę lat / long dla powiatu.

Jakieś rady, jak używać map/reduce, aby to osiągnąć?

W tym momencie musisz użyć distinct lub podobnej operacji Map / Reduce.

Jednak nie jestem pewien, czy zapewni to dokładnie to, czego szukasz, ponieważ nie jestem pewien, w jaki sposób zamierzasz wyodrębnić dane lat / long dla hrabstwa, gdy wszyscy masz dane miasta.

Jeśli możesz podać przykładowe wejścia i oczekiwane wyjścia, to może będę w stanie podać bardziej konkretną odpowiedź.

 3
Author: Gates VP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-13 18:36:41

Jestem początkującym programistą MongoDB MapReduce, ale spróbuję sprawdzić, czy to pomoże, zdefiniować funkcję zmniejszania Map,

Twoja funkcja mapy wyglądałaby następująco:

function() { 
   emit( this.county, {count: 1} ); 
}

Twoja funkcja Reduce wyglądałaby następująco:

function(key, values) { 
    var result = {count: 0};
    //Skip aggregation step if not needed 
    values.forEach(function(value) {     
       result.count += value.count;
    }); 
    return result;  
}

I przekazać warunek zapytania wraz z Map Reduce, powyższy pseudo kod powinien dać # rekordów dla każdego powiatu i listy samego powiatu. jeśli potrzebujesz tylko powiatów, możesz po prostu pominąć agregację za pomocą funkcji reduce, w którym to przypadku powinieneś dostać listę hrabstw.

Daj mi znać, jeśli jest lepszy sposób na osiągnięcie.
 0
Author: mailboat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-13 19:03:35