Myślę, że rozumiem, o co prosisz. Odpowiedź jest całkiem prosta w przypadku Map/Reduce.
Załóżmy, że masz następujące dokumenty osób:
{
"name": "Person A",
"interests" [ "computers", "fishing", "sports" ]
}
{
"name": "Person B",
"interests" [ "computers", "gaming" ]
}
{
"name": "Person C",
"interests" [ "hiking", "sports" ]
}
{
"name": "Person D",
"interests" [ "gaming" ]
}
Prawdopodobnie chciałbyś wyemitować swój klucz jako zainteresowanie, z wartością jako nazwą osoby (lub _id
).
function (doc) {
for (var x = 0, len = doc.interests.length; x < len; x++) {
emit(doc.interests[x], doc..name);
}
}
Twoje wyniki wyświetlania będą wyglądać tak:
- komputery => osoba A
- komputery => osoba B
- wędkarstwo => Osoba A
- gry => Osoba B
- gry => Osoba D
- wędrówki => Osoba C
- sport => Osoba A
- sport => Osoba C
Aby uzyskać listę osób, których interesuje komputer, możesz po prostu wysłać key="computers"
jako część ciągu zapytania.
Jeśli chcesz dodać funkcję zmniejszania do swojej mapy, możesz po prostu użyć _count
(skrót do użycia skompilowanej funkcji zmniejszania) i możesz pobrać liczbę wszystkich osób o określonych zainteresowaniach, możesz nawet użyć tego do ograniczenia zapytań o zainteresowania w celu budowania relacji.