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źć.
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ć..
Aby uzyskać więcej informacji, sprawdź to
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ź.
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.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