私はあなたが何を求めているのか理解していると思います。答えは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);
}
}
ビューの結果は次のようになります:
- コンピューター=>人物A
- コンピューター=>人物B
- 釣り=>Aさん
- ゲーム=>人物B
- ゲーム=>人物D
- ハイキング=>Cさん
- スポーツ=>人物A
- スポーツ=>人物C
コンピューターを関心のある人のリストを取得するには、key="computers"
を送信するだけです。 クエリ文字列の一部として。
マップにreduce関数を追加する場合は、_count
を使用するだけです。 (コンパイルされたreduce関数を使用するためのショートカット)そして、特定の関心を持つすべての人々の数を取得できます。それを使用して、関係を構築するためにクエリする関心を制限することもできます。