MongoDB中的多对多关系

Posted

技术标签:

【中文标题】MongoDB中的多对多关系【英文标题】:Many to many relation in mongoDB 【发布时间】:2020-12-05 20:30:22 【问题描述】:

我的 nosql 数据库中有两个模型(mongoDB 和 mongoose.js):UserClass

每个班级有一位老师和许多学生(老师和学生是用户模型)。

每个用户可以有很多类。

实现数据库的最佳解决方案是什么?

我认为在 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中的多对多关系的主要内容,如果未能解决你的问题,请参考以下文章

了解 MongoDB 中的多对多关系以及如何取消引用集合

MongoDB中的多对多关系

MongoDB中的多对多

社交应用的多对多关系:Mongodb 或 Neo4j 等图形数据库

MongoDB/Mongoose:多对多关系

Access中的多对多关系来自单个表