0

我玩的是建模 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?

有什么建议/建议吗?

4

1 回答 1

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'}}
])

像这样。

至于架构推荐,如果您打算经常进行此类查询,那么我会将主题分解为单独的集合。

于 2013-07-26T07:14:23.373 回答