我是 RavenDB 的新手,到目前为止我很喜欢它。我还需要为我的项目创建一个索引。
问题
我有数千份调查回复(即“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、创建日期进行过滤。据我了解,这是在查询时完成的...我只需要确保这些属性存在于转换结果中(或者是归约结果?或两者兼而有之?)。如果我是对的,那么这就不是什么问题了。
所需的结果
每次调查的每个问题都需要一个对象来给出每个选项的总和。希望它是不言自明的:
[
{
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
}
},
...
]
我的尝试
我没有走得太远,我想这个帖子 https://stackoverflow.com/questions/15059122/how-to-properly-create-a-map-reduce-index-for-ravendb-in-c-sharp正在引导我走上正确的道路,但它对我的值列表没有帮助。我搜索了又搜索,但找不到任何关于如何处理这样的嵌套数组的方向。这是我到目前为止所拥有的:
MAP:
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
}
REDUCE:
??
转换:
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 上。
已经花了很长时间了,我一直在研究这个问题,但无法把它做好。非常感谢任何帮助我达到所需结果的帮助!