2011-07-06 13 views
1

私は、ユーザーの会社に関する追加情報は、例えばCouchDBのビュー/減らす

を格納しているaccountdataが保存されている文書、ユーザーのドキュメントとドキュメントの2種類があります。

userdocs:

{ id : ABC 
, name : "user1" 
, active : false 
, type : "user" 
} 

{ id : XYZ 
, name : "user2" 
, active : true 
, type : "user" 
} 

企業:番目の文書IDに

{ id : ... 
    , name : "company1" 
    , owner : "ABC" 
    , type : "company" 
    } 

{ id : ... 
, name : "company2" 
, owner : "XYZ" 
, type : "company" 
} 

所有者リンクe登録後に文書を作成したユーザーは、文書の所有者が有効に設定されている会社のみを表示したいと考えています

これを行うにはどうすればよいでしょうか? reduce関数を使うことはできますか?任意の例が理解されます

答えて

1

異なるタイプのドキュメント(各ドキュメントに1つのドキュメントを区別するために各ドキュメントにタイプ属性を持つ)を格納し、view collationを使用するように非正規化データベースを作成します。

0

ご覧のとおり、各ドキュメントにはtype属性があります。とにかく、私はリスト関数を使ってこれを解決しました。おそらく、これを行う最善の方法ではありませんが、これまでのところ、私のユースケースに対してうまく働いています。私は確かにビューの照合を見ていますが、少し混乱します。私は、ビューの私の結果を変換し、ビューの標準出力のように見えるJSONを構築するために、このhttp://wiki.apache.org/couchdb/Formatting_with_Show_and_Listを使用

+2

でどのように動作するかの例を与えることができますどのようにあなたが使用しているソリューションに関する詳細を提供することができないthatsの言ったように?私はかなり興味があります。 –

0

、コードは次のようになります。私は唯一のアクティブなユーザーを発する私の見解では

while(row = getRow()) { 
    if(row.value.type=="user") 
     active.push(row.value.id) 
    if(row.value.type=="companies") 
     companies.push(row) 
} 
for(var i = 0; i < companies.length; i++){ 
    if(active.indexOf(companies[i].value.owner) != -1) 
    res.push(companies[i]) 
} 
send('{\"total_rows\":'+companies.length+',\"rows\":[') 
for(var i = 0; i < res.length;i++) { 
    send(toJSON(res[i])) 
    if(i+1 < res.length) 
    send(',') 
    } 
send(']}') 

私は、おそらくそれが行われる必要があります:)おそらく誰かが私にそれがビュー照合

関連する問題