2 つの提案... ビューの唯一の目的が特定のタグを持つレコードを検索することである場合は、タグごとにビュー行を単純に出力できます。
function (doc) {
if (doc.tags) {
for(var idx in doc.tags) {
emit(doc.tags[idx], null);
}
}
}
このマップ関数は、次のように行を提供します。
{"total_rows":13,"rows":[
{"id":"foo_doc_1","key":"a","value":null},
{"id":"foo_doc_3","key":"a","value":null},
{"id":"foo_doc_1","key":"b","value":null},
{"id":"foo_doc_2","key":"b","value":null},
{"id":"foo_doc_3","key":"b","value":null},
{"id":"foo_doc_1","key":"c","value":null},
{"id":"foo_doc_2","key":"c","value":null},
{"id":"foo_doc_1","key":"d","value":null},
{"id":"foo_doc_4","key":"d","value":null},
{"id":"foo_doc_4","key":"e","value":null}
]
}
キー (key="a" など) でクエリを実行すると、そのキーの結果が得られます。ただし、「2 番目のタグが 'xyz' であるすべてのドキュメントを教えてください」という懸念がある場合は、インデックスも出力できます。
function (doc) {
if (doc.tags) {
for(var idx in doc.tags) {
emit([parseInt(idx), doc.tags[idx]], null);
}
}
}
この例では、行は次のようになります。
{"total_rows":13,"rows":[
{"id":"foo_doc_1","key":[0,"a"],"value":null},
{"id":"foo_doc_3","key":[0,"a"],"value":null},
{"id":"foo_doc_2","key":[0,"b"],"value":null},
{"id":"foo_doc_4","key":[0,"d"],"value":null},
{"id":"foo_doc_1","key":[1,"b"],"value":null},
{"id":"foo_doc_3","key":[1,"b"],"value":null},
{"id":"foo_doc_2","key":[1,"c"],"value":null},
{"id":"foo_doc_4","key":[1,"e"],"value":null},
{"id":"foo_doc_1","key":[2,"c"],"value":null},
{"id":"foo_doc_4","key":[2,"f"],"value":null}
]
}
次に、配列キーを使用してクエリを実行し、特定の位置にあるキーを取得します (例: key=[1, "b"])。