MongoDB Mongoose方案嵌套文档结构和关系

MongoDB Mongoose方案嵌套文档结构和关系,mongodb,mongoose,database-design,schema,mongoose-schema,Mongodb,Mongoose,Database Design,Schema,Mongoose Schema,我有一个具有以下文档流的项目 用户->帐户->项目 用户 用户具有特定的角色 客户 由用户角色决定的积垢 特定用户将有权访问个人帐户。我想添加一个用户id为的数组用户组 项目 嵌套在与单个accountToken ID相关的帐户下 由用户角色决定的积垢 特定用户将有权访问单个项目 下面是为了演示而简化的模式模型示例 UserSchema.js: const UserSchema = new mongoose.Schema({ email: { type: Stri

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

用户->帐户->项目

用户

  • 用户具有特定的角色
客户

  • 由用户角色决定的积垢
  • 特定用户将有权访问个人帐户。我想添加一个用户id为的数组用户组
项目

  • 嵌套在与单个accountToken ID相关的帐户下
  • 由用户角色决定的积垢
  • 特定用户将有权访问单个项目
下面是为了演示而简化的模式模型示例

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);
const AccountSchema = new mongoose.Schema({
    accountName: {
      type: String,
    },
    accountToken: {
      type: String
    }
  });

  module.exports = mongoose.model('Account', AccountSchema);
const ProjectSchema = new mongoose.Schema({
    projectName: {
        type: String,
    },
    projectType: String,
    projectToken: String
})

module.exports = mongoose.model('Project', ProjectSchema);
AccountSchema.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);
const AccountSchema = new mongoose.Schema({
    accountName: {
      type: String,
    },
    accountToken: {
      type: String
    }
  });

  module.exports = mongoose.model('Account', AccountSchema);
const ProjectSchema = new mongoose.Schema({
    projectName: {
        type: String,
    },
    projectType: String,
    projectToken: String
})

module.exports = mongoose.model('Project', ProjectSchema);
ProjectSchema.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);
const AccountSchema = new mongoose.Schema({
    accountName: {
      type: String,
    },
    accountToken: {
      type: String
    }
  });

  module.exports = mongoose.model('Account', AccountSchema);
const ProjectSchema = new mongoose.Schema({
    projectName: {
        type: String,
    },
    projectType: String,
    projectToken: String
})

module.exports = mongoose.model('Project', ProjectSchema);
我一直在寻找建立嵌套或子文档模式关系的最佳方法,以及相互关联数据的最佳方法。任何指导和建议都将是巨大的帮助!谢谢

试试这个

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。最后,我将项目架构嵌套在帐户架构
projects:[ProjectSchema]
中,然后使用virtuals作为id。可能不是最好的,但目前它正在工作。