【问题标题】:Is it possible to create a custom mongodb cursor in meteor?是否可以在流星中创建自定义 mongodb 游标?
【发布时间】:2012-08-06 11:15:29
【问题描述】:

我有一个 Student 集合和一个 Person 集合。 人员包含以下字段:姓名、地址等 学生包含:rollno,以及一个存储该学生的 person._id 的人员字段

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

有没有办法在客户端上获取一个 mongodb 光标,该光标包含学生信息以及该学生个人文档中的选择性字段?

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

注意:我不想使用冗余并将 name 字段存储在 Student 文档中,所以这不是解决方案

【问题讨论】:

  • 为什么有两个独立的集合?
  • 有点像继承,Person可以是Student,Teacher,或者两者兼有。因此,学生/教师特定字段位于各自的集合中,而通用的每个人的详细信息(如姓名、地址、联系方式)位于 Person 集合中。这有点道理吗?
  • 是的,但不适用于架构设计。为什么不让学生文档具有非学生没有的附加字段?为什么要单独收藏?

标签: mongodb meteor


【解决方案1】:

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

听起来您正试图在一次阅读中阅读有关学生的所有信息 - 唯一的方法是将所有这些信息放在一个文档中。

文档数据库的灵活架构允许您在单个集合中拥有文档,这些文档不需要具有相同的架构,也就是字段数。

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

这个SO question和你的情况有些关系。

【讨论】:

    【解决方案2】:

    在此线程中查看已接受的答案:

    Possible bug when observing a cursor, when deleting from collection

    它涉及使用名为publishModifiedCursor 的内置_publishCursor 的修改版本,它允许您指定一个回调来为您正在发布的光标中的每个文档添加属性。

    【讨论】:

      【解决方案3】:

      我会将您的代码更改为在 Person 对象中具有角色/工作属性。 这是语义上的,至少对我来说是这样,并且考虑一下某人以您的原始方法换工作与简单地改变角色的难度级别。

      然后你就可以搜索了

      Persons.find {role: 'student'}
      

      这完全类似于拥有一个学生对象。

      正如 Asya 所说,学生们可以拥有其他人拥有的额外领域。

      【讨论】:

        猜你喜欢
        • 2015-12-03
        • 1970-01-01
        • 2021-12-26
        • 1970-01-01
        • 2017-07-07
        • 2016-09-27
        • 1970-01-01
        • 1970-01-01
        • 2013-02-05
        相关资源
        最近更新 更多