我玩最好的mongodb文档建模方法
我正在为一所学校建模。
学生有很多科目。
Student{
subjects:[ {name:'',
level:'',
short name:''
},
{...},
{...}]
}
决定对学生进行反规范化并将其嵌入学生的表现中。
极少数情况下需要查询和更新主题。
subjects.all
subject1.short_name = 'something new'
我知道我将不得不遍历每个学生来更新每个科目。
然而,这是回归所有独特科目的最好方法吗?
例如,您可以对student.subjects名称进行独特搜索吗?
或者更好的是拥有另一个
的集合Subjects{
name:'',
level:'',
short name:''
}
我仍然保留了非规范化的Student.subject。但这仅仅是为了提供所有提供的主题。
更新后会更新此+每个嵌入的Student.subject?
有任何建议/建议吗?
答案 0 :(得分:0)
然而,这是回归所有独特科目的最好方法吗?
这是您的架构的短暂下降。你可以轻松地做出这种事情,以换取你经常做的其他速度优势。
目前唯一真正的方法是使用distinct()
命令(http://docs.mongodb.org/manual/reference/method/db.collection.distinct/):
db.students.distinct('subjects.name');
或聚合框架:
db.students.aggregate([
{$unwind:'$subjects'},
{$group:{_id:'$subjects.name'}}
])
喜欢这样。
至于架构推荐,如果你打算经常进行这种查询,那么我会将主题分解为一个单独的集合。