Прежде чем я начну, пожалуйста, не говорите мне использовать SQL.Это небольшая проблема в более широком контексте, и я не могу и не хочу использовать здесь реляционную базу данных.Я знаю, что эту проблему довольно легко решить в SQL.
Существует три типа документов:
Команды принадлежат одному спонсору, но имеют много игроков.Игрок может состоять из нескольких команд, а спонсор может иметь несколько команд.
Игроки 1 --- N Команды N --- 1 Спонсоры
Я поместил идентификаторы документов игрока в документ Командыв массиве:
players: ["payer1","player2",...]
Теперь я хочу, чтобы все (разные, только один раз названные) спонсоры для конкретного игрока:
Игрок1: Спонсор1, Спонсор2, Спонсор3, ...
Это немного похоже на пример nn в CouchDB Wiki , но, поскольку в командных игроках есть несколько ключей, это на самом деле не работает.
Я создал с примерами данных. .
Есть идеи, как написать функцию MapReduce, чтобы получить этот результат?
Ближайшее, что я получил, но несколько раз показывает спонсоров, с уровнем группы 1:
function(doc) {
if(doc.type == "team")
emit(doc.players,doc.sponsor);
}
function(keys, values) {
return (values);
}