我正在设计一个mongodb架构,用于生成用于收集数据的动态用户界面。基本的想法是拥有一个"模板" document包含用户界面中所有字段的定义。在同一个"模板" document,有一个定义接口布局的模式。该接口具有部分,子部分,字段组和字段的嵌套结构;此层次结构对应于相关数据的逻辑分组。为了管理用户访问,我们还需要定义" Views"在"模板"文件也是如此。 A"查看"定义哪些部分,子部分,字段组和字段可见。我们只需要一次检索一个视图,因此我们想要过滤,并投影"模板"对特定视图可见。到目前为止,这是我们的架构:
{
_id: ""
"TemplateName": "Template 1"
"sections": [{
"name": "Details",
"sort": "1",
"views": ["View1"],
"subSections": [{
"name": "General",
"sort": "1",
"views": ["View1"],
"fieldGroups": [{
"name": "Group 1",
"sort": "1",
"fields": [{
"fieldId": "59d662a6c153f67518f98880",
"sort": "1",
"views":[{
"name":"View1",
"access":"read"
}]
},
{
"fieldId": "59d662a6c153f67518f98881",
"sort": "1",
"views":[{
"name":"View1",
"access":"read"
}]
}]
}]
}]
}]
}
现在这个设计很有效,因为我们通过在该视图中包含的特定子文档中嵌入视图名称来限制重复量。例如"详细信息"部分在" View 1"中可见。问题是如何根据视图名称有效地查询此文档,并仅投影特定的section,subsections,fieldGroups以及在其views数组属性中具有视图名称的字段。我只能通过首先展开然后使用匹配运算符来实现这一点,但这很麻烦,因为我们必须在逐渐更深的层次上展开以获得完整的结构。
此处提供建议和建议。