首页 文章

具有角色的refs数组的Mongoose模式

提问于
浏览
0

我对NoSQL的处理方式很新,所以请原谅我,如果我只是想到这个完全错误(我觉得我是) .

我的应用程序包含用户和组织,用户必须拥有并属于具有成员或所有者角色的组织 .

目前在我的用户架构中我有:

orgs:[{type:Schema.Types.ObjectId,ref:'Org'}]

在我的组织架构中,我有:

成员:[{type:Schema.Types.ObjectId,ref:'User'}]

但我还要附上会员或所有者的角色 .

这是我应该在实际参考中添加的东西,如:

成员:[{type:Schema.Types.ObjectId,ref:'User',role:String}]

或者角色应该在架构的其他地方?处理这个问题的正确方法是什么,或者是否有一种不同的方式来模式化这个更合适的方法?

一旦我为此设置了正确的架构,有一个如何使用这个roled ref创建一些用户/组织的示例会很有帮助 .

1 回答

  • 2

    你可以通过对你所拥有的东西进行一些小改动来做到这一点 . 我以相同的方式将消息存储在应用程序中(文本和发件人) .

    这是你可以做的:

    members: [{
        role: { 
          type: String
        },
        user: { 
          type: mongoose.Schema.Types.ObjectId, 
          ref: 'User'
        }
      }],
    

    然后,当您要将一个或多个成员添加到组织时(假设您已经单独创建了一个组织和一个用户):

    function addNewMember(org_id, user_id, role) {   
        var member = {role: role, user: user_id};
        Organization.findByIdAndUpdate(org_id, {"$push": {"members":member}}, function(err,org) {
                   ...
                 });)  
    // you can use the $each clause to add a whole array of members at the same time too
    // like so:
    // {"$push": {"members": 
    //              {
    //              "$each": [memberarray]
    //              }}}
    
    }
    

    当您想要找到包含其成员的组织时,您可以:

    Organization.findById(org_id) 
            .populate('members.user')
            .exec(callbackfunction);
    

    如果您确实需要为成员 - >组织复制每个成员的组织 - >成员关系,请仔细考虑 . 如果这确实很重要,在成功将用户添加到组织后,在回调中,您可以执行第二次查询以更新用户的orgs字段,就像上面一样 .

相关问题