RavenDB は初めてですが、今のところ気に入っています。プロジェクト用に作成するインデックスが 1 つ残っています。
問題
私は調査に対して何千もの回答 (つまり " Submissions
") を持っており、各提出物には特定の質問に対する一連の回答 (つまり " Answers
") があり、各回答には選択されたオプションの配列 (つまり " Values
") があります。
シングルはSubmission
基本的に次のようになります。
{
"SurveyId": 1,
"LocationId": 1,
"Answers": [
{
"QuestionId": 1,
"Values": [2,8,32],
"Comment": null
},
{
"QuestionId": 2,
"Values": [4],
"Comment": "Lorem ipsum"
},
...more answers...
]
}
さらに問題: SurveyId、LocationId、QuestionId、Creation Date でフィルタリングできるようにする必要があります。私が理解しているように、それはクエリ時に行われます...これらのプロパティが変換結果に存在することを確認する必要があります(またはreduce結果ですか?またはその両方ですか?)。私が正しければ、これはそれほど問題ではありません。
必要な結果
各オプションの合計を与える調査ごとに、質問ごとに 1 つのオブジェクトが必要です。うまくいけば、それは自明です:
[
{
SurveyId: 1,
QuestionId: 1,
NumResponses: 976,
NumComments: 273,
Values: {
"1": 452, // option 1 selected 452 times
"2": 392, // option 2 selected 392 times
"4": 785 // option 4 selected 785 times
}
},
{
SurveyId: 1,
QuestionId: 2,
NumResponses: 921,
NumComments: 46,
Values: {
"1": 325,
"2": 843,
"4": 119,
"8": 346,
"32": 524
}
},
...
]
私の試み
この記事は正しい道を進んでいると思いますが、値のリストについては役に立ちません。私は検索して検索しましたが、そのようなネストされた配列をどうするかについての方向性を見つけることができません。ここに私がこれまでに持っているものがあります:
地図:
from submission in docs.Submissions
from answer in submission.Answers
where answer.WasSkipped != true && answer.Value != null
select new {
SubmissionDate = submission["@metadata"]["Last-Modified"],
SurveyId = submission.SurveyId,
LocationId = submission.LocationId,
QuestionId = answer.QuestionId,
Value = answer.Value
}
減らす:
??
変身:
from result in results
from answer in result.Answers
where answer.WasSkipped != true && answer.Value != null
select new {
SubmissionDate = result["@metadata"]["Last-Modified"],
SurveyId = result.SurveyId,
LocationId = result.LocationId,
QuestionId = answer.QuestionId,
Value = answer.Value
}
価値があるのは、これが RavenHQ でホストされていることです。
私はこれに取り組んでいて、それを正しくすることができないほど長い時間がかかりました。必要な結果を得るために助けていただければ幸いです。