0

カウチベースのタグに基づいてビューからレコードをフィルタリングする最良の方法は何ですか? つまり、ドキュメントからタグを抽出し、ビューのマップ機能を使用してそれらをキーとして使用できることを理解しています。しかし、レコードのキー (複数の値である可能性があります) にタグが含まれているかどうかに基づいて、ビューからレコードを選択する方法はありますか?

例: 次のタグ (タグ 1、タグ 2、タグ 3、タグ 4) を持つトランザクションがあり、各ビュー レコード (エミット関数から) は次のようになります。

エミット ([タグ 1、タグ 2、タグ 3、タグ 4]、ヌル)

取得したいのは、tag2 を持つすべてのレコードです。

助けてくれてありがとう。

4

1 に答える 1

3

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"])。

于 2012-07-03T16:59:01.690 に答える