2011-01-07 3 views
8

XML文書を操作するためのjavascriptベースのフロントエンドに使用するXMLデータベースのCouchDB表現があります。基本的な構造は単純な3レベル階層です。すなわちcouchDBビューで他のドキュメントを参照する方法(同様の機能を結合する)

A - > B - > C

A:親文書(タイプA) B:親の子文書の任意の数の Cを入力します。親タイプB

の子文書の任意の数

type属性を持つこれらの3つのドキュメントタイプをCouchDBで表します。

私が何をしたいか

{ 
"_id":"llgc-id:433", 
"_rev":"1-3760f3e01d7752a7508b047e0d094301", 
"type":"A", 
"label":"Top Level A document", 
"logicalMap":{ 
    "issues":{ 
     "1":{ 
      "URL":"http://hdl.handle.net/10107/434-0", 
      "FILE":"llgc-id:434" 
     }, 
     "2":{ 
      "URL":"http://hdl.handle.net/10107/467-0", 
      "FILE":"llgc-id:467" 
     etc... 
     } 
    } 
} 
} 


{ 
"_id":"llgc-id:433", 
"_rev":"1-3760f3e01d7752a7508b047e0d094301", 
"type":"B", 
"label":"a B document", 
} 

はちょうどタイプのような文書を返しますが、例えばlogicalMapリスト内のBの文書からlabel属性を含むビューを生成しています

{ 
"_id":"llgc-id:433", 
"_rev":"1-3760f3e01d7752a7508b047e0d094301", 
"type":"A", 
"label":"Top Level A document", 
"logicalMap":{ 
    "issues":{ 
     "1":{ 
      "URL":"http://hdl.handle.net/10107/434-0", 
      "FILE":"llgc-id:434", 
      "LABEL":"a B document" 
     }, 
     "2":{ 
      "URL":"http://hdl.handle.net/10107/467-0", 
      "FILE":"llgc-id:467", 
      "LABEL":"another B document" 
     etc... 
     } 
    } 
} 
} 

私はこれを実行するための最良の方法のまわりで私の頭を取得するために苦労しています。それはかなり簡単だろうと思われる!

答えて

7

は、これは別の結果の各問題はしかし、それはしません発するinclude_docs=true

+1

で問い合わせるhttp://wiki.apache.org/couchdb/Introduction_to_CouchDB_views#Linked_documents

function(doc) { //.... if (doc.logicalMap.issues) { for (var i in doc.logicalMap.issues) { emit([doc._id,doc.logicalMap.issues[i]['FILE']], {_id: doc.logicalMap.issues[i]['FILE']}); } } } 

(未テスト)

の「リンクされたドキュメント」のセクションを見てください私は単一のドキュメントを作成して、それを生成することを望んでいました – Surfrdan

+1

あなたは 'emit(doc._id、{_ id:doc.logicalMap.issues [i] ['FILE']});'を実行し、しかし、あなたは結果を小さく抑えておくべきです可能な限り数字になっているので、私はむしろそのコードをクライアント側に移したいと思っています。 –

+2

reduce関数で結果をマージするのではなく、代わりにリスト関数を作成してみてください。 –

関連する問題