Acho que entendi o que você está perguntando. A resposta é bem direta com Map/Reduce.
Digamos que você tenha os seguintes documentos de pessoas:
{
"name": "Person A",
"interests" [ "computers", "fishing", "sports" ]
}
{
"name": "Person B",
"interests" [ "computers", "gaming" ]
}
{
"name": "Person C",
"interests" [ "hiking", "sports" ]
}
{
"name": "Person D",
"interests" [ "gaming" ]
}
Você provavelmente gostaria de emitir sua chave como interesse, com o valor como o nome da pessoa (ou
_id
). function (doc) {
for (var x = 0, len = doc.interests.length; x < len; x++) {
emit(doc.interests[x], doc..name);
}
}
Os resultados da sua visualização ficariam assim:
- computadores => Pessoa A
- computadores => Pessoa B
- pesca => Pessoa A
- jogos => Pessoa B
- jogos => Pessoa D
- caminhada => Pessoa C
- esportes => Pessoa A
- esportes => Pessoa C
Para obter uma lista de pessoas com interesse em computadores, basta enviar
key="computers"
como parte da string de consulta. Se você quiser adicionar uma função de redução ao seu mapa, você pode simplesmente usar
_count
(atalho para usar uma função de redução compilada) e você pode recuperar uma contagem de todas as pessoas com um interesse específico, você pode até usar isso para limitar quais interesses você consulta para construir seus relacionamentos.