【问题标题】:MongoDB Mongoose Scheme Nested Document Structure and RelationsMongoDB Mongoose Schema 嵌套文档结构和关系
【发布时间】:2020-09-15 02:50:47
【问题描述】:

我有一个具有以下文档流程的项目。

用户 -> 帐户 -> 项目

用户

  • 用户具有特定的角色

帐户

  • 以用户角色为条件的 CRUD
  • 特定用户将有权访问个人帐户。我正在考虑添加一个带有用户 ID 的数组 userGroup?

项目

  • 嵌套在与单个 accountToken ID 相关的 Accounts 下
  • 以用户角色为条件的 CRUD
  • 特定用户将有权访问各个项目。

以下是为演示目的而简化的示例模式模型。

UserSchema.js:

const UserSchema = new mongoose.Schema({
    email: {
      type: String,
      required: [true, 'Please add an email'],
      unique: true,
    },
    role: {
      type: String,
      enum: ['admin', 'user'],
      default: 'user'
    }
  });

  module.exports = mongoose.model('User', UserSchema);

AccountSchema.js:

const AccountSchema = new mongoose.Schema({
    accountName: {
      type: String,
    },
    accountToken: {
      type: String
    }
  });

  module.exports = mongoose.model('Account', AccountSchema);

ProjectSchema.js:

const ProjectSchema = new mongoose.Schema({
    projectName: {
        type: String,
    },
    projectType: String,
    projectToken: String
})

module.exports = mongoose.model('Project', ProjectSchema);

我被困在设置嵌套或子文档架构关系的最佳方式以及将数据相互关联的最佳方式上。任何指导和建议都会有很大帮助!谢谢!!!

【问题讨论】:

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


    【解决方案1】:

    试试这个;

    const UserSchema = new mongoose.Schema({
    email: {
      type: String,
      required: [true, 'Please add an email'],
      unique: true,
    },
    role: {
      type: String,
      enum: ['admin', 'user'],
      default: 'user'
    }
    });
    
    module.exports = mongoose.model('User', UserSchema);
    
    const AccountSchema = new mongoose.Schema({
      userId: {
         type: mongoose.Schema.Types.ObjectId,
         required: true,
         ref: 'User'
     },
     accountName: {
         type: String,
     },
    accountToken: {
        type: String
    }
    });
    
    module.exports = mongoose.model('Account', AccountSchema);
    
    const ProjectSchema = new mongoose.Schema({
      accountTokenId:{
          type: String
      },
      projectName: {
          type: String,
      },
      projectType: String,
      projectToken: String
    })
    
    module.exports = mongoose.model('Project', ProjectSchema);
    

    【讨论】:

    • 谢谢@joshua-oweipadei。我最终将 Project Schema 嵌套在 Account Schema projects: [ProjectSchema] 中,然后使用 virtuals 作为 id。可能不是最好的,但它目前正在工作。 Example
    猜你喜欢
    • 2021-05-06
    • 2016-02-29
    • 1970-01-01
    • 2012-10-17
    • 2011-11-10
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    相关资源
    最近更新 更多