Мисля, че разбирам какво питаш. Отговорът е доста ясен с Map/Reduce.
Да приемем, че имате следните документи за хора:
{
"name": "Person A",
"interests" [ "computers", "fishing", "sports" ]
}
{
"name": "Person B",
"interests" [ "computers", "gaming" ]
}
{
"name": "Person C",
"interests" [ "hiking", "sports" ]
}
{
"name": "Person D",
"interests" [ "gaming" ]
}
Вероятно бихте искали да издадете своя ключ като лихва, със стойността като име на лицето (или _id
).
function (doc) {
for (var x = 0, len = doc.interests.length; x < len; x++) {
emit(doc.interests[x], doc..name);
}
}
Резултатите от прегледа ви ще изглеждат така:
- компютри => Лице А
- компютри => Лице Б
- риболов => Лице А
- игри => Лице Б
- gaming => Лице D
- пешеходен туризъм => лице C
- спорт => Лице А
- спорт => Лице В
За да получите списък с хора с компютри като интерес, можете просто да изпратите key="computers"
като част от низа на заявката.
Ако искате да добавите функция за намаляване на вашата карта, можете просто да използвате _count
(пряк път за използване на компилирана функция за намаляване) и можете да извлечете броя на всички хора с конкретен интерес, можете дори да го използвате, за да ограничите интересите, които търсите, за да изградите взаимоотношенията си.