MongoDB 引用关系与 DBRef

MongoDB Referenced Relationships vs 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 中,我们在文档的集合中创建一个字段,并使用 ObjectId 存储值,就像我们以前在引用关系中所做的那样,但方式不同。考虑以下示例:

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

我们仍在使用 ObjectId 将值存储在 Employee 集合中,但语法有所不同,因为在此示例中,我们提到了要查找的数据库和集合。

为什么不直接使用引用关系来节省时间,而不是使用这种混乱而冗长的查询并浪费一半的时间?

我是不是漏掉了什么?

我是否应该考虑学习 DBrefs?

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

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

如果您想引用其他数据库中的文档,DBRef 可能会有用。它的用处受到以下事实的限制:通常您仍然需要在应用程序中处理跨数据库操作,因为驱动程序和服务器通常不会为您无缝地执行此操作。例如,DBRef 是 not directly usable with aggregation framework.

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

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

Should I even consider learning DBrefs ?

它们是非常小众的功能。应该不是。