1

我对 NoSQL 的做事方式很陌生,所以如果我只是在想这完全错误的事情,请原谅我(我觉得我是)。

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

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

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

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

成员:[{类型:Schema.Types.ObjectId,参考:'用户'}]

但我也想为此附加成员或所有者的角色。

这是我应该以某种方式放入实际参考中的东西吗:

成员:[{类型:Schema.Types.ObjectId,参考:'用户',角色:字符串}]

还是该角色应该在架构中的其他位置?处理这个问题的正确方法是什么,或者有没有更合适的模式化这个问题的不同方法?

一旦我为此正确设置了架构,有一个示例说明如何使用此角色引用创建一些用户/组织将会很有帮助。

4

1 回答 1

3

您可以通过对那里的内容进行少量更改来做到这一点。我以相同的方式(文本和发件人)将消息存储在应用程序中。

这是你可以做的:

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 字段,就像上面一样。

于 2014-09-20T02:27:20.323 回答