Ik denk dat ik begrijp wat je vraagt. Het antwoord is vrij eenvoudig met Map/Reduce.
Stel dat u de volgende personendocumenten heeft:
{
"name": "Person A",
"interests" [ "computers", "fishing", "sports" ]
}
{
"name": "Person B",
"interests" [ "computers", "gaming" ]
}
{
"name": "Person C",
"interests" [ "hiking", "sports" ]
}
{
"name": "Person D",
"interests" [ "gaming" ]
}
U wilt waarschijnlijk uw sleutel als de rente verzenden, met de waarde als de naam van de persoon (of _id
).
function (doc) {
for (var x = 0, len = doc.interests.length; x < len; x++) {
emit(doc.interests[x], doc..name);
}
}
Uw weergaveresultaten zien er als volgt uit:
- computers => Persoon A
- computers => Persoon B
- vissen => Persoon A
- gaming => Persoon B
- gaming => Persoon D
- wandelen => Persoon C
- sport => Persoon A
- sport => Persoon C
Om een lijst te krijgen van mensen met computers als interesse, stuur je eenvoudig key="computers"
als onderdeel van de queryreeks.
Als u een reductiefunctie aan uw kaart wilt toevoegen, kunt u eenvoudig _count
. gebruiken (snelkoppeling om een gecompileerde verkleinfunctie te gebruiken) en u kunt een telling van alle mensen met een bepaalde interesse ophalen, u kunt die zelfs gebruiken om te beperken welke interesses u opvraagt om uw relaties op te bouwen.