JSON で次のように、RavenDb に格納されている 2 つの異なるオブジェクト タイプがあります。これらは親子タイプの関係です。
Account/1
{
"Name": "Acc1",
}
Items/1
{
"Account": "Account/1",
"Value" : "100",
"Tags": [
"tag1",
"tag2"]
}
Items/2
{
"Account": "Account/1",
"Value" : "50",
"Tags": [
"tag2"]
}
アカウントには何千ものアイテムがある可能性があるため、これらを同じドキュメントに保存したくないことに注意してください。
次のようなものを返す map/reduce インデックスを作成しようとしています。
{
"Account": "Acc1",
"TagInfo": [
{ "TagName" : "tag1",
"Count" : "1", //Count of all the "tag1" occurrences for acc1
"Value" : "100" //Sum of all the Values for acc1 which are tagged 'tag1'
},
{ "TagName" : "tag2",
"Count" : "2", //Two items are tagged "tag2"
"Value" : "150"
}]
}
つまり、すべての個別のタグ名とそれぞれの数およびその値のリストです。
アカウントとアイテムのコレクションを一緒にマップするには、マルチマップを使用する必要があると思いますが、結果の「TagInfo」部分を作成するための縮小部分がわかりません。
これは可能ですか、それともレイヴンでこれをすべて間違ってモデリングしていますか?
編集:
このクエリから取得したいクラスは次のようになります。
public class QueryResult
{
public string AccountId {get;set;}
public TagInfo Tags {get;set;}
}
public class TagInfo
{
public string TagName {get;set;}
public int Count {get;set;}
public int TotalSum {get;set;}
}