Meteor 反应性地将某些字段从用户集合复制到自定义用户配置文件集合

Meteor reactively copy certain fields from user collection to custom userprofiles collection

在 Meteor 上,我安装了 konecty meteor-user-presence (link) 包来为我的应用程序中的每个用户启用用户状态。这个包在 Meteor 用户集合上添加了额外的字段(状态、状态连接)。在我当前的应用程序设置中,我有一个名为 UserProfiles 的不同集合,用于存储有关每个用户的附加信息。我使用用户集合中的 id 作为 UserProfiles 集合的标识符,在字段 owner.

有没有一种方法可以将来自用户集合的两个字段(status 和 statusConnection)的更新反应性地复制到自定义 UserProfiles 集合?

我可以使用另一个名为 collection-hooks {matb33:collection-hooks} 的 Atmospherejs 软件包来实现此目的。我基本上将其添加到服务器上的 main.js 中:

Meteor.users.after.update(function (userId, doc, fieldNames, modifier) {
    UserProfiles.update({
      owner : doc._id
    }, {
      $set: {
        status : doc.status
      }
    }, {multi: true})
});

此包为集合添加了一个挂钩。每次应用程序触发 Meteor.users 集合的更新时,基本上是每次 konecty meteor-user-presence 更改 user 集合中的 statusstatusConnection 字段时, collection-hooks 包挂钩更新操作并执行其他任务。该软件包还有其他有用的挂钩,例如before.insertbefore.updatebefore.removeafter.insertafter.updateafter.remove

需要 {multi: true} 才能使行为应用于所有用户。我不知道这是否会对应用程序性能产生影响,我确信它会产生一些影响,尤其是当应用程序扩展到拥有大量用户群时。您应谨慎应用此解决方案。

这是一本很好的入门读物:A Look At Meteor Collection Hooks