node.js - MongoDB中的多对多关系
问题描述
我的 nosql 数据库中有两个模型(mongoDB 和 mongoose.js):User和Class。
每个班级有一位老师和许多学生(老师和学生都是用户模型)。
每个用户可以有很多类。
实现数据库的最佳解决方案是什么?
我认为最好有一个user_id
内部类模型数组和一个用户class_id
模型数组,对吗?
假设教师用户不能作为学生,学生用户也不能作为教师。
解决方案
您可以在架构中使用 mongoose ref
(请参阅文档)。例如:
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 的填充来自动获取引用的文档,而不仅仅是文档的 id:
User.findById(userId).populate("classes");
Class.findById(classId).populate("users");
这是一个很好的教程,更详细地解释了它: https ://bezkoder.com/mongodb-many-to-many-mongoose/
推荐阅读
- entity-framework - 查询组合
- javascript - react es6 项目无法在 Safari 和 Internet Explorer 上运行
- html - 为什么我的导航栏组件在 Angular 中不起作用?
- javascript - 通过 JavaScript 将样式顶部添加到其他高度元素的 ID 元素
- django - 对产品进行分类
- java - 如何修复Firefox浏览器中的ajax调用,但在chrome浏览器中工作正常
- json - 使用 JQ 在树状 json 对象中沿每条路径收集所有根到叶值
- javascript - 有没有办法在创建侦听器时记录索引的值,以便在调用侦听器函数时使用相同的值?
- here-api - 获取路径链接的形状
- java - 为什么我的堆栈代码中的 pop 方法不执行?