Jag tror jag förstår vad du frågar om. Svaret är ganska enkelt med Map/Reduce.
Säg att du har följande persondokument:
{
"name": "Person A",
"interests" [ "computers", "fishing", "sports" ]
}
{
"name": "Person B",
"interests" [ "computers", "gaming" ]
}
{
"name": "Person C",
"interests" [ "hiking", "sports" ]
}
{
"name": "Person D",
"interests" [ "gaming" ]
}
Du skulle förmodligen vilja skicka din nyckel som intresse, med värdet som personens namn (eller _id
).
function (doc) {
for (var x = 0, len = doc.interests.length; x < len; x++) {
emit(doc.interests[x], doc..name);
}
}
Dina visningsresultat skulle se ut så här:
- datorer => Person A
- datorer => Person B
- fiske => Person A
- spel => Person B
- spel => Person D
- vandring => Person C
- sport => Person A
- sport => Person C
För att få en lista över personer med datorer som intresse kan du helt enkelt skicka key="computers"
som en del av frågesträngen.
Om du vill lägga till en reduceringsfunktion på din karta kan du helt enkelt använda _count
(genväg för att använda en kompilerad reduceringsfunktion) och du kan hämta en räkning av alla personer med ett särskilt intresse, du kan till och med använda det för att begränsa vilka intressen du frågar efter för att bygga dina relationer.