繁体   English   中英

Meteor mongo:跨集合同步字段

[英]Meteor mongo: sync fields across collections

我有一个像这样的会议文件:

{
    "name":"Meeting Name",
    "uuid":"NYoc2aL6",
    "participants":[
        {
            "id":"JLKGZnfFkGvX9DHgz",
            "status":"joined",
            "name":"Guest 03"
        },
        {
            // newly invited user, user hasn't logged in with invite url yet
            "id":"",
            "status":"invited",
            "name":"email@email.com"
        }
    ]
}

我需要将'name'字段与Users集合中的名称同步。 是否有一种自动方式来执行此操作,例如在数据库级别,或者我是否坚持在名称更改的每个位置手动更新?

在Mongo或Meteor中我没有“自动”方式来做到这一点。 但是,为什么不从文档中取出公共字段并只链接ID? 这称为“数据库规范化”,这是一个从表中删除冗余数据(Mongo中的集合)以防止出现这类问题的过程。

这可以通过观察用户db的变化“自动”完成:

var usersCursor = Meteor.users.find();
usersCursor.observeChanges({"changed":function(id, fields){
    if(fields.profile.name){
        ... do whatever needs to be done ...
    }
}});

这是Meteor中非常常见的模式。 您可以使用matb33:collection-hooks包来“挂钩”集合更新以同步共享值。 这当然应该在服务器端完成,因此您不必担心一些无法使用的相关文档。

例:

Meteor.users.after.update((userId, doc, fieldNames, modifier, options)=>{
  if ( fieldNames.indexOf('profile.name') > -1 ){ // the name was changed
    Meetings.update({ 'participants.id': doc._id },
      { $set: { 'participants.name': doc.profile.name }},
      { multi: true });
  }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM