Как использовать Map / Reduce в MongoDB?

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

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

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

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

введите описание изображения здесь

Для получения дополнительной информации ознакомьтесь с этим

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

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

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

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

… и, возможно, вытащить лат / долго.

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

Любые советы по использованию карты / сокращения для этого?

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

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

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

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

Функция «Карта» будет выглядеть так:

 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; } 

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

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