MongoDB、Mongoose、外键、连接表

Posted

技术标签:

【中文标题】MongoDB、Mongoose、外键、连接表【英文标题】:MongoDB, Mongoose, Foreign keys, Joining Tables 【发布时间】:2015-12-15 15:17:33 【问题描述】:

我一直在网上寻求有关 MongoDB 外键关系的帮助。

我想知道是否可以在MongoDB中实现主/外键关系,类似于mysql

如果没有,还有其他人推荐使用的节点包吗?

我只是想链接两个集合,学生和班级?如果有人能够提供帮助,那就太好了。谢谢。

【问题讨论】:

我认为这是一个合理的问题。如果您是 Mongodb 的新手并且来自关系数据库背景,那么问这些问题是很正常的 【参考方案1】:

“主键”的 MongoDB 等效项是每个文档的字段 _id。默认情况下,它填充了一个唯一的 ObjectId,但是当您有一个更适合您的数据的主键时,您可以将其分配给 _id 字段(当您的“主键”是多个字段时,使其成为子文档分配给_id)。

MongoDB 在文档之间没有明确声明的外键关系。毕竟,它不是关系数据库。当然,这并不会阻止您在每个 Student 文档中以字段形式拥有“未声明的”外键,这是它所属的 Class 文档的唯一标识符。

或者,您可以将属于同一 ClassStudents 作为数组嵌入到 Class 文档中。这是否是一个好主意取决于您打算如何使用您的数据。

理想的 MongoDB 架构在很大程度上取决于数据的结构方式,而是取决于您要对其执行的查询。当您设计数据模式时,关系数据库用户需要了解的一件重要事情是 MongoDB 不执行 JOIN。当您想要加入时,您需要在应用程序中执行它们。因此,对于任何性能关键的用例,您应该避免任何需要从多个集合中获取数据的设计。

【讨论】:

感谢您的回复 - 很抱歉这个糟糕的问题 - 我是使用 Mongo 的新手 - 你会推荐使用 MySQL 节点包吗?这对于关系数据库来说看起来更好,并且更适合我。 @user3180997 我从来没有用过,所以我不能说什么。但仅仅因为 MongoDB 受到许多 Node.js 开发人员的欢迎并不意味着它是任何项目的最佳技术。

以上是关于MongoDB、Mongoose、外键、连接表的主要内容,如果未能解决你的问题,请参考以下文章

备忘--node连接mongodb

Mongoose 与原生 MongoDB 相比有啥好处?

Mongoose 添加到 MongoDB 的基本功能?

TypeError:将循环结构转换为 mongodb/mongoose 的 JSON

$match mongodb聚合框架_mongoose中的多条件[重复]

$match mongodb聚合框架_mongoose中的多条件[重复]