MongoDB引用关系与DBRef的比较

问题描述 投票:0回答:1

我一周前开始学习MongoDB,但我被卡在了关系上。更多的是我很困惑.我得到了什么时候使用嵌入式关系和什么时候使用引用关系。我知道Embedded Relationships有一些缺点,这就是为什么我们更喜欢Referenced Relationships而不是Embedded Relationships.现在,我正在学习DBRefs.问题是,我无论如何都没有发现它的帮助。这就是我的想法。我希望我是错的。

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

我的意思是,我们可以使用DBrefs执行与使用Referenced Relationships执行相同的事情。

在Referenced Relationships中,我们在文档中的一个集合中创建一个字段,并像这样存储来自不同集合的文档的ObjectIds。

> 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存储值,就像我们在Referenced Relationships中做的那样,但方式不同。考虑下面的例子。

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

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

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

我是不是错过了什么?

我是否应该考虑学习DBrefs?

mongodb mongodb-query relationship relation dbref
1个回答
0
投票

DBRef的意义在于它允许从一个字段引用一个数据库和一个集合。如果没有它,你将需要两个字段[*]。

[*] 从技术上讲,你可以使用一个单一字段,例如,它本身就是一个包含数据库和集合引用的Hash,但这与DBRef本质上是一样的,但没有标签。

如果你想引用其他数据库中的文档,DBRef可能是有用的。它的有用性受到了限制,一般来说,你仍然需要在你的应用程序中处理跨数据库的操作,因为驱动程序和服务器一般不会为你无缝地完成这些操作。例如,DBRef是 不能直接使用聚合框架.

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

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

我是否应该考虑学习DBrefs?

它们是非常小众的功能。可能不需要。

© www.soinside.com 2019 - 2024. All rights reserved.