MongoDB 引用关系与 DBRef

以撒

一周前我开始学习 MongoDB,但我一直在学习关系。更像是我糊涂了。我知道何时使用嵌入式关系以及何时使用引用关系。我知道嵌入式关系有一些缺点,这就是为什么我们更喜欢引用关系而不是嵌入式关系。现在,我正在学习 DBRefs。问题是,我觉得它无论如何都没有帮助。那就是我所想的。我希望我是错的。

在 DBrefs 中,我们可以在不同集合中的一个文档中引用来自不同集合的文档。在 RefRels 中,我们可以在不同集合中的一个文档中引用来自不同集合的不同文档。

我的意思是,我们可以使用 DBrefs 执行与使用引用关系执行相同的操作。

在引用关系中,我们在文档的集合中创建一个字段,并存储来自不同集合的文档的 ObjectId,如下所示:

> db.Employee.insert({"Emp_Name":"Emp_1", "Emp_Address":[ObjectId("some_id_from_Address_collection"), ObjectId("some_id_from_Address_collection"), ObjectId("some_id_from_Address_collection")], "Emp_Phone":[ObjectId("some_id_from_Phone_collection"), ObjectId("some_id_from_Phone_collection"), ObjectId("some_id_from_Phone_collection")]})

在 DBrefs 中,我们在文档的集合中创建一个字段,并使用 ObjectIds 存储值,就像我们过去在引用关系中所做的那样,但方式不同。考虑以下示例:

> db.Employee.insert({"address": {"$ref": "address_home", "$id": ObjectId("534009e4d852427820000002"), "$db": "tutorialspoint"}, "name": "Tom Benzamin"})

我们仍然使用 ObjectId 在 Employee 集合中存储值,但语法不同,因为在这个例子中,我们提到了要查找的 DB 和集合。

为什么不直接使用引用关系并节省时间,而不是使用这种令人困惑且冗长的查询并浪费一半的时间?

我错过了什么吗?

我应该考虑学习 DBrefs 吗?

D. SM

DBRef 的要点是它允许从单个字段引用数据库和集合。没有它,您将需要两个字段[*]。

[*] 从技术上讲,您可以使用单个字段,例如,包含数据库和集合引用的哈希本身,但这本质上与 DBRef 相同,但没有标签。

如果您想引用其他数据库中的文档,DBRef 可能会很有用。它的用处受到以下事实的限制:通常您仍然需要在应用程序中处理跨数据库操作,因为驱动程序和服务器通常不会为您无缝地执行此操作。例如, DBRef不能直接与聚合框架一起使用

DBRef 实际上只是提供了一种更方便的方式来存储数据库+集合名称对。

如果您的所有集合都在同一个数据库中,则您根本不需要 DBRef(实际上它只会妨碍您)。

我应该考虑学习 DBrefs 吗?

它们在很大程度上是一个利基功能。可能不是。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spring Data MongoDB无法加载引用集合(@DBRef)

考虑DBRef的MongoDB Shard

MongoDB中的DBref

Mongodb按dbref字段分组

MongoDB:DBREF列表中的嵌套搜索

Mongoose DBRef的实现与MongoDB文档中的不同

MongoDB关系:嵌入还是引用?

在mongodb中正确引用文档(关系)?

MongoDB-从DBRef字段类型仅更新$ ref

在Spring的MongoDB中的@DBref列表项中查找/删除

使用QueryDSL使用Spring Data MongoDB查询DBRef

在 Spring 数据的 RepositoryRestResource 中急切地加载 MongoDB @DBRef

如何使用 Doctrine 在 MongoDB 中的 dbref 上分组

Spring MongoDB dbref一对多如何实现

不使用DBRef映射集合(Spring Data MongoDB)

使用Spring Boot MongoDb无法使用DBRef创建“空” MongoDb文档

MongoDB中用于文档引用关系的Mongoose实现

MongoDB 是否将文档中的 DBRef 作为 16MB 阈值的完整大小文档?

使用Mongo本机查询解析MongoDB DBRef数组并处理已解析的文档

Spring Data MongoDB-如果DbRef字段不存在,则添加到db

在 MongoDB 中构建搜索查询时嵌入式字段和 dbRef 字段之间的区别

spring-data-mongodb:findAll()带有输入文档列表和嵌入式DBRef文档的搜索参数

使用Jackson PTH和Spring Data MongoDB DBRef的Java到JSON序列化生成额外的目标属性

在MongoDB中使用文档引用为一对多关系建模时需要权衡吗?

在MongoDB中以一对一关系存储文档引用的正确方法

了解MongoDB中的多对多关系以及如何取消引用集合

TFS vNext无法解析对名为“ dbref.dacpac”的源中的外部元素的引用,因为未加载任何此类源

MongoDB 是非关系缺点

与MongoDB的多对多关系