MongoDB / Mongoose多对多关系 - 用户,项目和角色

时间:2017-05-30 15:43:11

标签: mongodb database-design mongoose relationships mongoose-schema

我们的项目有以下要求 -

  1. 用户可以参与多个项目
  2. 项目可以有多个用户。
  3. 用户可以是项目的所有者,管理员或查看者。
  4. 显然,项目只能有一个所有者。
  5. 项目可以有多个管理员或查看者。
  6. 每个用户都有一个home / default项目。
  7. 所以我创建了以下模式 - 但我无法使用populate,我发现添加/更新/删除了很多痛苦。此外,当我查询项目时,我想显示用户的电子邮件ID而不是objectId,但不想使用电子邮件作为参考,因为用户可以更改他们的电子邮件。考虑到架构上最受欢迎的操作,请帮助我设计更好的设计 -

    1. 用户可以创建项目
    2. 将人员添加到项目中
    3. 查看他所有的项目和成员
    4. 更改项目中某人的角色
    5. 从项目中删除某人
    6. 根据他们的权利
    7. 查看项目,所有者和成员(电子邮件不是对象ID)

      以下工作模式存在于单独的文件user.js和project.js中,并且需要导出模型。

          var userSchema = mongoose.Schema({
            username: {type:String},
            password: String,
            email: {type:String, required:true, unique: true, index: true},
            createdAt: { type: Date, default: Date.now },
            firstName: String,
            lastName: String,
            home_project: {type:Schema.Types.ObjectId, ref:Project},
            owner: [{type:Schema.Types.ObjectId, ref:Project}],
            admin: [{type:Schema.Types.ObjectId, ref:Project}],
            viewer: [{type:Schema.Types.ObjectId, ref:Project}]
         });
      
          var projectSchema = mongoose.Schema({
            projectName: {type:String, required:true, unique: true, index: true},
            createdAt: { type: Date, default: Date.now },
            owner: {type:String, ref:User},
            admin: [{type:String, ref:User}],
            viewer: [{type:String, ref:User}]
         });

0 个答案:

没有答案