6

私は、さまざまな関連ドキュメントのIDの配列であるフィールドを持つcouchdbにいくつかのドキュメントを持っています:

{
  associatedAssets: ["4c67f6241f4a0efb7dc2abc24a004dfe",  "270fd4508a1222a1e2a27cbe7f002d9z"]
}

それ自体が ID の配列であるキーを渡すことができるビューを作成し、キー配列を介して渡された 1 つ以上の ID を含む associatedAssets フィールドを持つドキュメントを返すビューを作成したいと考えています。

$.ajax({
  url: "/db/_design/design_doc/_view/summaryByAssociatedAssets",
  type: "post",
  data: JSON.stringify({keys: ["4c67f6241f4a0efb7dc2abc24a004dfe", "6c67f6241f4a0efb7dc2abc24a004dfd"]}),
  dataType: "json",
    contentType: "application/json",
})
.done(function(resp){
  console.log(resp[0]);
});

associatedAssets 配列に「4c67f6241f4a0efb7dc2abc24a004dfe」、「6c67f6241f4a0efb7dc2abc24a004dfd」のキーが 1 つ以上含まれているドキュメントが返されます。

ビュー内のキーにアクセスできないので、アクセスできるかどうかわかりません。これを達成するためのより良い方法はありますか?

ありがとう!

4

2 に答える 2

11

ビューはassociatedAssets、次のように、要素ごとに出力行を生成するだけで済みます。

function(doc) {
  if( doc.associatedAssets ) {
    for( var i=0, l=doc.associatedAssets.length; i<l; i++) {
      emit( doc.associatedAssets[i], doc );
    }
  }
}

次に、呼び出しを調整して、その配列をクエリ文字列パラメーターとして渡すようにする必要がありますkeys。これにより、その配列のキーに一致するビューからの行のみが返されます。

合計はさておき-最近のCouchDBバージョンを想定すると、ビューインデックスが完全なドキュメントで(不必要に)いっぱいにならないように、をに置き換えてからクエリで使用docするのがベストプラクティスです。emit{ _id: doc._id }include_docs=true

于 2012-06-23T07:29:37.740 に答える
0

ビュー コードでは、ドキュメント自体のあらゆるものにアクセスできますが、渡したパラメーターにアクセスする方法はありません。

実行している特定のクエリ用に生成された一時ビューを使用できます。

代わりに ElasticSearch を使用することもできます。ElasticSearch にはより豊富なクエリ DSL があります。これが ElasticSearch の要点だからです。CouchDB River を使用すると、CouchDB からすべてのドキュメントを自動的にインデックス化できます。

ElasticSearch を使用すると、関連するアセットに渡したリストの任意の要素が含まれている任意のドキュメントを検索できます。

于 2012-06-23T06:25:10.983 に答える