MongoDB Mongoose Schema 嵌套文档结构和关系
Posted
技术标签:
【中文标题】MongoDB Mongoose Schema 嵌套文档结构和关系【英文标题】:MongoDB Mongoose Scheme Nested Document Structure and Relations 【发布时间】: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);
我被困在设置嵌套或子文档架构关系的最佳方式以及将数据相互关联的最佳方式上。任何指导和建议都会有很大帮助!谢谢!!!
【问题讨论】:
【参考方案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 Schemaprojects: [ProjectSchema]
中,然后使用 virtuals 作为 id。可能不是最好的,但它目前正在工作。 Example以上是关于MongoDB Mongoose Schema 嵌套文档结构和关系的主要内容,如果未能解决你的问题,请参考以下文章
MongoDb - 要创建一个新的ObjectId,请尝试`Mongoose.Types.ObjectId`而不是使用`Mongoose.Schema.ObjectId`