Penso di aver capito quello che chiedi. La risposta è piuttosto semplice con Map/Reduce.
Supponi di avere i seguenti documenti di persone:
{
"name": "Person A",
"interests" [ "computers", "fishing", "sports" ]
}
{
"name": "Person B",
"interests" [ "computers", "gaming" ]
}
{
"name": "Person C",
"interests" [ "hiking", "sports" ]
}
{
"name": "Person D",
"interests" [ "gaming" ]
}
Probabilmente vorresti emettere la tua chiave come interesse, con il valore come nome della persona (o _id
).
function (doc) {
for (var x = 0, len = doc.interests.length; x < len; x++) {
emit(doc.interests[x], doc..name);
}
}
I risultati della tua visualizzazione sarebbero simili a questo:
- computer => Persona A
- computer => Persona B
- pesca => Persona A
- gioco => Persona B
- gioco => Persona D
- escursionismo => Persona C
- sport => Persona A
- sport => Persona C
Per ottenere un elenco di persone con computer come interesse, puoi semplicemente inviare key="computers"
come parte della stringa di query.
Se vuoi aggiungere una funzione di riduzione alla tua mappa, puoi semplicemente usare _count
(scorciatoia per utilizzare una funzione di riduzione compilata) e puoi recuperare un conteggio di tutte le persone con un interesse particolare, puoi persino usarlo per limitare gli interessi a cui interroghi per costruire le tue relazioni.