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
文档的唯一标识符。
或者,您可以将属于同一 Class
的 Student
s 作为数组嵌入到 Class
文档中。这是否是一个好主意取决于您打算如何使用您的数据。
理想的 MongoDB 架构在很大程度上取决于数据的结构方式,而是取决于您要对其执行的查询。当您设计数据模式时,关系数据库用户需要了解的一件重要事情是 MongoDB 不执行 JOIN。当您想要加入时,您需要在应用程序中执行它们。因此,对于任何性能关键的用例,您应该避免任何需要从多个集合中获取数据的设计。
【讨论】:
感谢您的回复 - 很抱歉这个糟糕的问题 - 我是使用 Mongo 的新手 - 你会推荐使用 MySQL 节点包吗?这对于关系数据库来说看起来更好,并且更适合我。 @user3180997 我从来没有用过,所以我不能说什么。但仅仅因为 MongoDB 受到许多 Node.js 开发人员的欢迎并不意味着它是任何项目的最佳技术。以上是关于MongoDB、Mongoose、外键、连接表的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:将循环结构转换为 mongodb/mongoose 的 JSON