迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MongoDB >

MongoDB 中的外键

作者:迹忆客 最近更新:2023/05/10 浏览次数:

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”的公共字段。

外键 2

将一列拖放到另一列上以创建外键。 这将创建一个新窗口,您可以在其中为外键提供描述并添加其他字段。

使用虚拟外键在 MongoDB 中更快地浏览数据

您可以使用虚拟外键浏览您集合中的数据。 此外,关系数据编辑器允许您同时浏览来自多个集合的数据。

您可以使用外键快速浏览与国家相连的城市。


总结

借助这篇 MongoDB 教程文章,您了解了如何将 MongoDB 集合可视化为图表并使用 DbSchema 构建虚拟外键。 您现在还应该能够同时浏览来自不同集合的数据。

另外,虚拟外键只会保存在本地工程文件中,不会影响数据库。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 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 进行开始查询。 它为查询中的模式匹配字符串提供正则表达式功能。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便