2015-04-20 5 views
1

Допустим, у меня есть коллекция пользователей. У них есть «предметы», и у каждого субъекта есть приоритет, который определяет, какой приоритет имеет пользователь в этом предмете. У меня было несколько ситуаций, подобных этому, но теперь пусть это будут пользователи, темы и приоритеты.CouchDB структура представления

Я хочу показать пользователей, которые выбрали тему и отсортировать их по приоритету. Пользователи и subjetcs в «многие ко многим», и это realtions является образцом структура пользователя:

{ name:"Nic", 
    subjects: [ 
    { name:"math", priority:10}, 
    { name:"english", priority: 11} ...]} 

Как следует организовать структуру вида?

Первый вариант - создать вид by-subject, уменьшить пользователей по теме и получить список пользователей «математики», таких как _view/by-subjects?key="math"&reduce=true. Но в этом случае я должен сортировать по приоритету в клиентском приложении ...

Во-вторых, для создания отдельного представления по каждому предмету и испускания priority в качестве ключа. Поэтому я мог бы взять данные от _view/math?descending=true, и он будет отсортирован. Но, как я понял каждый раз, когда новый пользователь вставил в БД, все 42 представления будут обновлены (в случае, если у меня есть 42 предмета). В первом случае у меня есть только одно представление для обновления.

Итак, вопрос в том, какой вариант предпочтительнее для CouchDB или более идиоматический?

ответ

2

Если вы испускают

[":subject",":user",":priority"]

как ключ и запрос ?key="math" вы получите алфавитный отсортированный список пользователей и их приоритетов.

Если вы испускают

[":subject",":priority",":user"]

Вы получаете тот же самый список, отсортированный по priority. Вы также можете попросить первую десятку от addin ?limit=10

+0

спасибо, это имеет смысл, чувствую себя немного глупо :) – zarkone

+0

На самом деле, я снова застрял .. Если я 'emit', например' [" math ", 8]' Мне нужно было запросить точно весь ключ, например '? key = [" math ", 8]'. В противном случае я не получаю никаких строк в ответе – zarkone

+0

вам не следует - сколько раз мне нужна была дружеская помощь, чтобы отступить назад и увидеть простое решение для чего-то, что у меня было несколько сложных ответов для :-) –

Смежные вопросы