2016-05-26 19 views
0

に親IDを検索:は、私は次のような構造でCloudant DBを持ってcloudant

{id: 1, resource:”john doe”, manager: “john smith”, amount: 13} 
{id: 2, resource:”mary doe”, manager: “john smith”, amount: 3} 
{id: 3, resource:”john smith”, manager: “peter doe”, amount: 10} 

私は額の合計を返すために、クエリを必要なので、私はEMIT(doc.managerでクエリを構築しました、doc.amount)返信する

{"rows":[ 
{"key":"john smith","value":16}, 
{"key":"peter doe","value":10}]} 

魅力的なように働いています。しかし、私はマネージャー名と一緒にマネージャーIDが必要です。私が探している結果は次のとおりです:

{"rows":[ 
{"key":{"john smith",3},"value":16}, 
{"key":{"peter doe",null},"value":10}]} 

親IDを検索するにはマップビューをどのように構築する必要がありますか?

おかげで、 エリック

答えて

0

は、残念ながら、私は正確にあなたが1つのクエリで欲しいものを行う方法はないと思います。あなたは、データベースに次の3つの文書を持っていると仮定すると:

{ 
    "_id": "1", 
    "resource": "john doe", 
    "manager": "john smith", 
    "amount": 13 
} 

-

{ 
    "_id": "2", 
    "resource": "mary doe", 
    "manager": "john smith", 
    "amount": 3 
} 

-

{ 
    "_id": "3", 
    "resource": "john smith", 
    "manager": "peter doe", 
    "amount": 10 
} 

あなたが望むものに近いものは、次のマップ機能になります(コンパウンドキーを使用する)と_sum reduce:

function(doc) { 
    emit([doc.manager, doc._id], doc.amount); 
} 
あなたは、本質的に、あなたが既に持っているものと同じ結果を得る、 reduce=truegroup_level=1

{"total_rows":3,"offset":0,"rows":[ 
{"id":"1","key":["john smith","1"],"value":13}, 
{"id":"2","key":["john smith","2"],"value":3}, 
{"id":"3","key":["peter doe","3"],"value":10} 
]} 

これはreduce=falseであなたに以下のような結果を与えるだろうあなたの代わりにreduce=trueを行う場合

{"rows":[ 
{"key":["john smith"],"value":16}, 
{"key":["peter doe"],"value":10} 
]} 

をし、 group=true(正確なグループ分け)の場合、次の結果が得られます。

{"rows":[ 
{"key":["john smith","1"],"value":13}, 
{"key":["john smith","2"],"value":3}, 
{"key":["peter doe","3"],"value":10} 
]} 

manager_idフィールドのそれぞれの固有の組み合わせが合計されます。残念ながら、これはあなたの望むものではありません。あなたが達成したいことを達成するために、私はあなたの最善を考えますが、データベースを照会した後に値を合計することになります。

+0

私はあなたの答えが素晴らしいと思って、ユーザーに必要なものを正確に伝えます。 IDについては少し誤解があるようです:ドキュメントIDとマネージャIDがあります。私は各マネージャーが同じ名前を持っていても、一意のIDを持つと仮定します。 manager idがドキュメントに存在する場合は、例で示したように複合キーを発行し、 '_sum' reduce関数を使用することができます。これは正しい動作になりますか? – seb

+0

'[doc.manager、doc.id]'の複合キーを使用することはできます。しかし、あなたはまだ私が上記で概説したのと同じ問題にぶつかると思います。 –

関連する問題