Node.js 具有角色的引用数组的Mongoose模式

Node.js 具有角色的引用数组的Mongoose模式,node.js,mongodb,mongoose,role,refs,Node.js,Mongodb,Mongoose,Role,Refs,我对NoSQL的工作方式非常陌生,所以如果我只是完全错误地思考这个问题,请原谅(我觉得我是) 我的应用程序有用户和组织,用户必须拥有并属于具有成员或所有者角色的组织 当前在我的用户模式中,我有: 组织:[{type:Schema.Types.ObjectId,ref:'Org'}] 在我的组织架构中,我有: 成员:[{type:Schema.Types.ObjectId,ref:'User'}] 但我也希望在此附加一个成员或所有者角色 这是我应该放在实际参考中的东西吗 成员:[{type:Sch

我对NoSQL的工作方式非常陌生,所以如果我只是完全错误地思考这个问题,请原谅(我觉得我是)

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

当前在我的用户模式中,我有:

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

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

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

但我也希望在此附加一个成员或所有者角色

这是我应该放在实际参考中的东西吗

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

或者角色应该在模式中的其他位置?处理这个问题的正确方法是什么,或者是否有其他更合适的方法来规划这个问题


一旦我正确地设置了这个模式,有一个例子来说明如何使用这个角色引用创建一些用户/组织将是很有帮助的。

您可以通过对现有内容的一个小更改来实现这一点。我在应用程序中以相同的方式存储消息(文本和发件人)

以下是您可以做的:

members: [{
    role: { 
      type: String
    },
    user: { 
      type: mongoose.Schema.Types.ObjectId, 
      ref: 'User'
    }
  }],
    Organization.findById(org_id) 
        .populate('members.user')
        .exec(callbackfunction);
然后,当您要向组织添加一个或多个成员时(假设您已经分别创建了一个组织和一个用户):

当您想要找到一个组织,包括其成员时,您可以执行以下操作:

members: [{
    role: { 
      type: String
    },
    user: { 
      type: mongoose.Schema.Types.ObjectId, 
      ref: 'User'
    }
  }],
    Organization.findById(org_id) 
        .populate('members.user')
        .exec(callbackfunction);
如果确实需要将每个成员的组织->成员关系复制为成员->组织,请仔细考虑。如果这确实很重要,那么在成功地将用户添加到组织中之后,您可以在回调中执行第二次查询以更新用户的orgs字段,如上所述