Creo que entiendo lo que estás preguntando. La respuesta es bastante sencilla con Map/Reduce.
Digamos que tiene los siguientes documentos de personas:
{
"name": "Person A",
"interests" [ "computers", "fishing", "sports" ]
}
{
"name": "Person B",
"interests" [ "computers", "gaming" ]
}
{
"name": "Person C",
"interests" [ "hiking", "sports" ]
}
{
"name": "Person D",
"interests" [ "gaming" ]
}
Probablemente desee emitir su clave como interés, con el valor como el nombre de la persona (o _id
).
function (doc) {
for (var x = 0, len = doc.interests.length; x < len; x++) {
emit(doc.interests[x], doc..name);
}
}
Los resultados de su vista se verían así:
- ordenadores => Persona A
- ordenadores => Persona B
- pesca => Persona A
- juego => Persona B
- juego => Persona D
- senderismo => Persona C
- deportes => Persona A
- deportes => Persona C
Para obtener una lista de personas con computadoras como interés, simplemente puede enviar key="computers"
como parte de la cadena de consulta.
Si desea agregar una función de reducción a su mapa, simplemente puede usar _count
(acceso directo para usar una función de reducción compilada) y puede recuperar un recuento de todas las personas con un interés particular, incluso puede usarlo para limitar los intereses que consulta para construir sus relaciones.