2017-10-16 10 views
0

MapReduceでは、多くの場所で言及されているように、these Standford course notesthis MSc thesisplagiarized copy of that thesisなどのようにデータをジョインすることが可能です:p。http://ijniet.org:p。CouchDBビューを使用して、多目的結合が可能ですか?

私は3つのエンティティがあります

  1. A
  2. B
  3. C

ABは、カラムabに参加することができ、かつBCは、カラムbcに接合することができます。私はだと思います。私はMapReduceタスクをカスケード接続することでこれを実現できます。しかし、CouchDBでは、Map関数、関数の縮小、MapReduceビューを使うリスト関数、またはこれらの組み合わせを問わず、CouchDBではこれを行うことができません。

CouchDBでは同じ結合キーを持つ異なるエンティティのドキュメントを出力します。しかし、私が知る限り、同じキーまたはキー範囲のいずれかで複数のエンティティをグループ化することが可能なマップ機能はありませんか?

これは、外部キー列が結合ごとに異なるJOINSの場合に特に使用されます。

答えて

1

CouchDBでカスケード結合を実行することはできません。

できるジョインは、1対多のジョインだけです。

それは値としてリンクされた文書を発するビューで構成されています

function(doc){ 
    emit([doc._id,0]); 
    emit([doc.ab,1],{_id:doc.ab}); 
} 
その後

あなたはあなたがこのような何かを得るでしょう?include_docs=true

で照会:

{rows:[ 
    {key:["my_main_doc_id",0],doc:{my main document...}}, 
    {key:["my_main_doc_id",1],doc:{child doc...}} 
]} 

これを参照してくださいdocumentation

+0

これは、ドキュメント内でエンティティリレーションシップを作成しているようです。同じキーを使用して異なるエンティティタイプのドキュメントを発行し、次にグループ化されたマップインデックスを取得することによって、結合を近似することもできます。しかし、rereduce = trueを許可する必要があるので、reduce関数で実際の結合を行うことができないことを認識しています –

関連する問題