【问题标题】:Meteor: How do you populate a field from one collection into another collection with _id field?Meteor:你如何用 _id 字段将一个集合中的字段填充到另一个集合中?
【发布时间】:2014-09-16 09:17:30
【问题描述】:

在 mongo 中,我有一个文档,该文档将待处理的 userId 存储在协作者对象数组中,如下所示:

researchThread {
  _id: 4374583575745756
    pending: {
      collaborators: [
      {
        userId: '13745845754745753'
      },
      {
        userId: '23755845854745731' 
      },
      {
        userId: '33755845653741736'
      }]

  }
}

userId 是用户集合中用户的 _id 字段。每个用户还有一个姓名和一个电子邮件字段。

如何为 researchThread.pending.collaborators 对象数组中的每个用户将用户集合中的姓名和电子邮件字段填充到此文档中?另外,填充的数据在模板中使用时会是反应性的吗?

【问题讨论】:

    标签: mongodb meteor


    【解决方案1】:

    遍历每个协作者,通过在用户集合中搜索 id 来找到相关的用户文档,并使用该信息更新 researchThread 文档。

    如果 researchThread 集合是您在模板中绘制的 Meteor.Collection,则数据将是反应性的。

    但是,为什么要复制用户数据?当您需要模板中的数据时,为什么不让 Meteor 根据 researchThread userId 查询用户集合?

    【讨论】:

    • 所以只需在客户端对用户集合进行数据库查询并使用模板助手将用户名和电子邮件放入模板中?这有什么安全问题吗?
    • 差不多。安全性在不同的层面。您应该阅读 Meteor 文档以了解如何处理它。
    • 我不熟悉 Meteor 的这方面,但这似乎效率低下。将 _id 分组到单个 users.find() 查询中,然后循环遍历结果,而不是潜在地为每个协作者项目发送新请求,会有什么好处吗?
    • 是的,会有的。他最后问的问题真的是一针见血,实际上你应该做的是将合作者拉成一个直线阵列(在你的出版物或辅助方法中,具体取决于你的设置和你所追求的),可能使用 groupBy 或下划线方法,然后使用 $in 运算符从您的用户集合中获取它们(在客户端,或根据您的设置再次获取)。
    猜你喜欢
    • 2018-10-01
    • 1970-01-01
    • 2023-03-26
    • 2021-02-22
    • 2017-07-12
    • 1970-01-01
    • 2017-03-14
    • 2021-09-07
    • 1970-01-01
    相关资源
    最近更新 更多