Это всего лишь предположение и предположение с моей стороны, но я думаю, что у меня есть хорошая идея. (Я бы также настоятельно рекомендовал просмотреть данные * * по типу местоположения GeoCouch .)
Если вы хотите продолжить самостоятельно, вы можете сохранить каждое местоположение со всеми уровнями детализации, сохраненными в виде атрибутов:
{
"continent": "North America",
"country": "United States",
"state": "Texas",
"city": "Houston"
}
Я из США, поэтому я использую то, что обычно использую для определения своего местоположения. (Я заметил, что вы использовали Прованс, округ и т. Д., Которые можно легко включить в эту модель)
В любом случае, функция просмотра будет выглядеть так:
function (doc) {
emit([doc.continent, doc.country, doc.state, doc.city], null);
}
Это представление выведет:
{
"key": ["North America", "United States", "Texas", "Houston"],
"value": null
}
Теперь я знаю, что это избыточные данные, поскольку они хранятся таким образом для каждого места. Это нормально, мы имеем дело с NoSQL, нет необходимости продолжать мыслить реляционно. (именно поэтому вы смотрите на другое решение, такое как CouchDB)
В любом случае, вы можете использовать параметр просмотра group_level
, чтобы "развернуть" ваши местоположения. Использование group_level=1
даст вам результат просмотра, сгруппированный по континенту. group_level=2
будет группироваться по стране, group_level=3
будет группироваться по штатам и т. Д.
Использование функции уменьшения позволяет получить счетчики и другую статистику для каждой из этих группировок. Надеюсь, это поможет!