Je pense que je comprends ce que vous demandez. La réponse est assez simple avec Map/Reduce.
Supposons que vous disposiez des documents suivants :
{
"name": "Person A",
"interests" [ "computers", "fishing", "sports" ]
}
{
"name": "Person B",
"interests" [ "computers", "gaming" ]
}
{
"name": "Person C",
"interests" [ "hiking", "sports" ]
}
{
"name": "Person D",
"interests" [ "gaming" ]
}
Vous voudriez probablement émettre votre clé comme intérêt, avec la valeur comme nom de la personne (ou _id
).
function (doc) {
for (var x = 0, len = doc.interests.length; x < len; x++) {
emit(doc.interests[x], doc..name);
}
}
Les résultats de votre vue ressembleraient à ceci :
- ordinateurs => Personne A
- ordinateurs => Personne B
- pêche => Personne A
- jeu => Personne B
- jeu => Personne D
- randonnée => Personne C
- sport => Personne A
- sport => Personne C
Pour obtenir une liste de personnes qui s'intéressent aux ordinateurs, vous pouvez simplement envoyer key="computers"
dans le cadre de la chaîne de requête.
Si vous souhaitez ajouter une fonction de réduction à votre carte, vous pouvez simplement utiliser _count
(raccourci pour utiliser une fonction de réduction compilée) et vous pouvez récupérer un décompte de toutes les personnes ayant un intérêt particulier, vous pouvez même l'utiliser pour limiter les intérêts que vous interrogez pour construire vos relations.