MongoDB中的多对多关系
Posted
技术标签:
【中文标题】MongoDB中的多对多关系【英文标题】:Many to many relation in mongoDB 【发布时间】:2020-12-05 20:30:22 【问题描述】:我的 nosql 数据库中有两个模型(mongoDB 和 mongoose.js):User 和 Class。
每个班级有一位老师和许多学生(老师和学生是用户模型)。
每个用户可以有很多类。
实现数据库的最佳解决方案是什么?
我认为在 Class 模型中包含 user_id
数组和在 User 模型中包含 class_id
数组是最好的,对吗?
假设教师用户不能是学生,学生用户也不能是教师。
【问题讨论】:
@AndrewLi 这只是我数据库中的多对多关系,我必须使用 nosql。 【参考方案1】:您可以在架构中使用猫鼬的ref
(请参阅docs)。例如:
const UserSchema = new mongoose.Schema(
firstName: String,
lastName: String,
// other properties you want to define
classes: [
type: mongoose.Schema.Types.ObjectId,
ref: "Class"
]
)
const ClassSchema = new mongoose.Schema(
className: String,
// other properties you want to define
users: [
type: mongoose.Schema.Types.ObjectId,
ref: "User"
]
)
以后查询数据库时可以使用mongoose的populate自动获取引用的文档,而不仅仅是文档的id:
User.findById(userId).populate("classes");
Class.findById(classId).populate("users");
这是一个很好的教程,它更详细地解释了它: https://bezkoder.com/mongodb-many-to-many-mongoose/
【讨论】:
这不是我的问题的答案。我知道如何实现这一点。我知道这个解决方案最适合这个数据库吗? Afaik 如果您需要在 mongodb 中执行此操作,这就是您要走的路。阅读链接文章中的“MongoDB 多对多关系的引用或嵌入”部分 - 在我看来它解释得很好:)以上是关于MongoDB中的多对多关系的主要内容,如果未能解决你的问题,请参考以下文章