Как мне использовать Map / Reduce в MongoDB? - PullRequest
9 голосов
/ 13 июня 2011

У меня возникают проблемы, когда я не могу понять, как работает карта / уменьшение в MongoDB. У меня есть коллекция с полями: areacode, state, county, zip, city, lat, lon, в которой перечислены все почтовые индексы в США вместе с соответствующим округом, штатом и т. Д.

Я бы хотел иметь возможность запросить, скажем, все округа или города в данном штате. Так что в основном это какой-то запрос, который ищет все записи, где "State = MI". В этом случае возвращается около 900 записей. Как мне сгруппировать их по округам, чтобы я получил 83 округа для этого штата? Я не хочу использовать различные, поскольку я хотел бы иметь возможность упорядочить их в алфавитном порядке и, возможно, также вывести лат / длинный.

Любой совет, как использовать карту / уменьшить для достижения этой цели? Я чувствую, что это довольно просто, я просто не могу понять это.

Ответы [ 3 ]

44 голосов
/ 14 июня 2011

У меня нет опыта работы с PHP, но если вы хотите узнать, как работает MongoDB Map-Reduce, вы можете проверить это ..

enter image description here

Длябольше информации, проверить это

3 голосов
/ 13 июня 2011

Как мне сгруппировать их по округам, чтобы я просто получил 83 округа для этого штата?

Как вы описываете, для этого потребуется отдельная команда .

Я не хочу использовать разные, поскольку я хотел бы иметь возможность упорядочить их в алфавитном порядке

Команда distinct вернет массиврезультатов.Их сортировка должна быть тривиальной, если они еще не отсортированы.

... и, возможно, также вывести лат / длинный.

Что лат / длинныйты хочешь вытащить?Исходя из вашей схемы, у вас есть лат / лонг для городов, но я не вижу лат / лонг для округа.

Какой-нибудь совет, как использовать карту / редукцию для достижения этой цели?

На данный момент, вы должны использовать distinct или аналогичную операцию Map / Reduce.

Однако я не уверен, что это даст именно то, что вы ищетепоскольку я не совсем понимаю, как вы собираетесь извлекать данные по широте / длине для округа, когда все, что у вас есть, это данные по городу.

Если вы можете предоставить некоторые примерные входные данные и ожидаемые выходные данные, тогда я смогудать более конкретный ответ.

0 голосов
/ 13 июня 2011

Я новичок в программировании MongoDB MapReduce, но попытаюсь определить, поможет ли это, определить функцию Map Reduce,

Ваша функция карты будет выглядеть так:

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

Ваша функция уменьшения будет выглядеть следующим образом:

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

И передайте условие запроса вместе с Map Reduce, приведенный выше псевдокод должен дать вам # записей для каждого округа и списка самого округа. если вам нужны только округа, вы можете просто пропустить агрегацию с помощью функции Reduce, и в этом случае вы должны получить список округов.

Дайте мне знать, если есть лучший способ достичь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...