У меня возникают проблемы с тем, как 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; }
И передайте условие запроса вместе с уменьшением карты, приведенный выше псевдокод должен предоставить вам # записей для каждого округа и списка самого округа. если вам нужны только округа, вы можете просто пропустить агрегацию с помощью функции сокращения, в которой вы должны получить список округов.
Дайте мне знать, есть ли лучший способ достичь.