2012-06-08 50 views
1

我有一个Student集合和一个Person集合。 人员包含以下字段:姓名,地址等 学生包含:rollno和一个存储此人的person._id的人员字段是否有可能在流星中创建一个自定义的mongodb游标?

现在我想在学生模板中显示学生的姓名,但注释在Student中没有name字段,我需要从该学生的Person文档中获取该字段。

有没有办法让客户端上的mongodb光标具有学生信息以及该学生的人员文档中的选择性字段?

此外,有没有更好或更标准的方法来实现我想要实现的目标?

注:我不希望使用冗余度和name场存储在文件的学生,所以这不是一个解决方案

+0

为什么你有两个单独的集合? –

+0

这有点像继承,一个人可以是学生,老师,或两者兼而有之。因此,学生/教师特定字段位于其各自的集合中,而通用的每个人的详细信息(如姓名,地址,联系人详细信息都在Person集合中)。 这有意义吗? –

+0

是的,但不适用于模式设计。为什么不让学生文件具有非学生不具备的额外领域?为什么要单独收藏? –

回答

2

有我想要实现的更好或更标准的方法到 的实现?

听起来好像你正试图在一次阅读中读取关于学生的所有信息 - 唯一的方法就是将所有信息都放在一个文档中。

灵活的文档数据库模式允许您将文档放在一个集合中,这些文档不需要具有相同的模式,也可以有多个字段。

所以我建议你考虑为什么你实际上需要单独的人和学生集合 - 这会导致当你添加一个学生时写入两个集合(而一个单独的写入是原子的,两个写入不是),它也是导致您现在遇到的问题,您需要有两个单独的读取来获取有关学生的所有信息。

这个SO question与你的情况有些相关。

0

我会更改您的代码以在Person对象中具有角色/作业属性。 至少对我而言,它是语义的,并且思考用原来的方法改变工作的人相对于简单地改变角色的困难程度。

然后,你可以只搜索

Persons.find {role: 'student'} 

而这也只是与具有Student对象完全类似。如Asya所说,学生们可以拥有其他领域所拥有的额外领域。

相关问题