Navicat 博客

2019 年 2 月 19 日,由 Robert Gravelle 撰写

上周的文章中,我们通过 MongoDB 中的嵌入式和引用式方法探讨了对文档关系建模的优缺点。然后,我们创建嵌入式和引用式关系,并获得了一些宝贵的经验。今天,我们将学习如何在 MongoDB 中创建 DBRefs。

将 DBRef 与引用式关系进行比较

正如在上周关于 MongoDB 关系的文章中所看到的,我们可以通过创建引用关系在 MongoDB 中实施规范化的数据库结构。引用关系通常也称为手动引用,因为我们手动将引用的文档的 id(或整个文档)存储在另一个文档中。如果文档包含来自不同集合的引用,我们可以使用 MongoDB DBRefs。

今天的文章作为一个示例,我们将使用 DBRefs 而不是手动引用,让我们想想一个方案。我们在不同的集合(address_home、address_office、address_mailing 等)中存储不同类型的地址(家、办公室、邮件等)。现在,当用户集合的文档引用地址时,它还需要根据地址类型指定要查找的集合。每当文档需要引用来自许多集合的文档时,我们都应该使用 DBRefs。

DBRefs 的实际效果

DBRefs 是由三个字段组成:

  • $ref:此字段指定引用的文档的集合
  • $id:此字段指定引用的文档的 _id 字段。
  • $db:这是一个可选字段,包含引用的文档所在的数据库的名。

让我们通过删除嵌入字段并将其替换为 DBRef 来修改上周文章中 Barbara Palmer 的地址信息。

  • 在 Navicat 编辑器中以“树视图”打开她的信息。展开第一个地址文档,然后点击地址字段下方的加号(+)以插入上面的三个 DBRef 字段:

  • DBRef 需要地址文档的 $id 字段。你可以在地址集合中找到。只需从“135 Sycamore Dr.”地址文档中复制:

  • 当完成添加新字段后,请务必删除文档中的所有现有地址信息:

  • 这是完整的 address_home DBRef:

  • 对Barbara Palmer 的第二个地址采用相同的步骤,除了这次给它指定一个 “address_work”的 $ref。

使用新的 DBRefs

现在我们已经更新了雇员文档以使用 DBRefs,我们将不得不改变从 employees 集合中提取数据的方式。下面的代码动态地在由 $ref 参数(在我们的例子中为 address_home)指定的集合查找具有由 DBRef $ id 参数指定的 id 的文档:

总结

在今天的文章中,我们学习了如何使用 Navicat for MongoDB 在 MongoDB 中创建DBRefs。DBRef 非常适合将多个集合中的文档与来自单个集合的文档相链接。话虽如此,如果在多个集合中没有引用的文档,我建议使用手动引用。

如果你想了解有关 Navicat for MongoDB 的更多信息,请访问产品页面。你是否使用许多数据库类型?Navicat Premium 12.1也支持 MongoDB!

Navicat 文章
频道条目
分享
文章归档