MongoDB 中的外键
MongoDB 是一个众所周知的数据库,它可以在没有模式的情况下工作。 相反,它使用类似 JSON 的文件来保存数据并且不强加任何结构。
与传统的 RDBMS 不同,MongoDB 需要一种独特的数据库设计方法。 但是,总的来说,数据库更容易扩展,因为它没有施加很多限制。
外键
外键是链接两个表的一列或一组列。 它包含链接到子表中其他列的父表中的主键列。
以两个表为例:国家和城市。 我们想将这两个表链接在一起,以便每个城市都与适当的国家相关联。
可以使用外键来完成此操作:
如果我们从上面示例中的 city 表中读取数据,我们可以看到每个城市都有一个关联的 country_id。 这将允许您通过单个查询搜索巴基斯坦的所有城市。
创建外键时,我们可以指定如果数据被修改或销毁应该发生什么。 比如我们可以选择级联,就是说如果一个国家被淘汰了,所有和它有关联的城市也都被淘汰了。
我们也可以设置为null,即删除country数据库中的数据时,链接的城市设置为null。
MongoDB 引用
通常,MongoDB 不使用外键的概念。 但是,关系数据库可以使用外键同时可视化来自多个集合的数据。
MongoDB 存储数据的方式也不同。 例如,MongoDB 使用集合、对象和字段,而不是使用表、列和行。
MongoDB 提供了两种不同的方式在集合中存储数据:非规范化和规范化。
反规范化
在非规范化中,同一个集合包含多种数据。
下面的示例演示了如何将与每个人链接的地址嵌入到人员集合中。
> db.persons.findOne()
{
name: 'Ali Ikram',
addresses : [
{ street: '123 PWD', city: 'Rawalpindi', cc: 'PAK' },
{ street: '123 ABC', city: 'Faisalabad', cc: 'PAK' }
]
}
适合一对多。 它的优点是不需要对另一个文档执行额外的查询。
但是,它不能单独管理嵌入文档的实体。
规范化
在规范化中,不同的数据存储在不同的集合中。 这个过程类似于在关系数据库中存储数据,但我们使用集合而不是表。
在 MongoDB 中,引用主要用于规范化过程。 然后将来自子表的引用(通常是对象 ID)嵌入到父表中。
阅读信息时,用户必须执行多个查询才能从多个集合中检索数据。
例如,我们将采用以下两个集合,students 和 courses。 一门课程将包含课程集合中引用的许多学生。
您可以在 MongoDB 中定义所谓的外键。 但是,您需要自己维护数据完整性。
例子:
students
{
_id: ObjectId(...),
name: 'Haris',
courses: ['chem101', 'chem102'] // <= ids of the courses
}
courses
{
_id: 'chem101',
name: 'Chemistry 101',
description: 'Introduction to Chemistry'
}
courses 字段包含课程的 _id
。 定义一对多关系非常简单。
但是,如果要检索学生 Haris 的课程名称,则需要执行另一个操作以通过 _id
检索课程文档。
如果课程 chem101 被删除,我们需要执行另一个操作来更新学生文档中的课程字段。
在 MongoDB 中创建虚拟外键
DbSchema 将模式的本地图像保存在模型文件中。 这意味着您可以离线处理项目而无需连接到数据库。
重新连接后,您可以比较和同步数据库与本地项目文件之间的差异。 您还可以使用项目文件构建虚拟外键关系。
这些外键只能在DbSchema中使用,对数据库没有影响。
可以快速轻松地制作外键。 以城市和国家集合为例。 作为参考,两者都有一个名为“国家/地区 ID”的公共字段。
将一列拖放到另一列上以创建外键。 这将创建一个新窗口,您可以在其中为外键提供描述并添加其他字段。
使用虚拟外键在 MongoDB 中更快地浏览数据
您可以使用虚拟外键浏览您集合中的数据。 此外,关系数据编辑器允许您同时浏览来自多个集合的数据。
您可以使用外键快速浏览与国家相连的城市。
总结
借助这篇 MongoDB 教程文章,您了解了如何将 MongoDB 集合可视化为图表并使用 DbSchema 构建虚拟外键。 您现在还应该能够同时浏览来自不同集合的数据。
另外,虚拟外键只会保存在本地工程文件中,不会影响数据库。
相关文章
在 MongoDB Shell 中列出所有数据库
发布时间:2023/05/11 浏览次数:75 分类:MongoDB
-
交互式 Mongo Shell 提供了多个用于获取数据的选项。 本文介绍了在 Mongo Shell 中列出数据库的几种不同方法。
MongoDB 中检查字段包含的字符串
发布时间:2023/05/11 浏览次数:137 分类:MongoDB
-
这篇文章解决了如何在 MongoDB 中使用正则表达式来确定字段是否包含字符串。在 MongoDB 中使用正则表达式 正则表达式 (regex) 是定义搜索模式的文本字符串。
在 MongoDB 中 upsert 更新插入
发布时间:2023/05/11 浏览次数:162 分类:MongoDB
-
在 MongoDB 中,upsert 结合了更新和插入命令。 它可以在 update() 和 findAndModify() 操作中使用。MongoDB 中的 upsert 查询 upsert 采用单个布尔参数。
如何卸载 MongoDB
发布时间:2023/05/11 浏览次数:180 分类:MongoDB
-
要从您的计算机中卸载 MongoDB,您必须先删除 MongoDB 服务、数据库和日志文件。使用这篇 MongoDB 文章,您将能够从 Ubuntu Linux、Mac 和 Windows 卸载 MongoDB。 请务必保留数据备份,因为一旦卸载,便
在 MongoDB 中存储日期和时间
发布时间:2023/05/11 浏览次数:199 分类:MongoDB
-
本 MongoDB 教程解释了 Date() 对象是什么以及如何使用 Date() 方法对集合进行排序。 这也将帮助您找到在 MongoDB 中显示和存储日期/时间的最佳方法。
MongoDB 按 ID 查找
发布时间:2023/05/11 浏览次数:139 分类:MongoDB
-
MongoDB 中的 find by Id() 函数用于获取与用户提供的 id 相匹配的文档。 如果找不到与指定 ID 匹配的文档,则返回空值。
检查 MongoDB 服务器是否正在运行
发布时间:2023/05/11 浏览次数:127 分类:MongoDB
-
这篇 MongoDB 教程将告诉您如何检查是否安装了 MongoDB 以及安装的 MongoDB 服务器的版本。 它在 Windows、UBUNTU 和 MAC 等不同的操作系统中实现。
MongoDB 中的分页
发布时间:2023/05/11 浏览次数:140 分类:MongoDB
-
这篇文章将介绍什么是 MongoDB 中的分页。 为什么在 MongoDB 中需要分页以及在 MongoDB 中完成分页的不同方法或方式是什么。
MongoDB 从查询开始
发布时间:2023/05/11 浏览次数:135 分类:MongoDB
-
在这篇 MongoDB 文章中,用户将学习如何使用 $regex 进行开始查询。 它为查询中的模式匹配字符串提供正则表达式功能。