MongoDB 引用关系与 DBRef

Isa*_*aac 4 relationship relation mongodb dbref mongodb-query

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

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

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

在引用关系中,我们在文档的集合中创建一个字段,并存储来自不同集合的文档的 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")]})
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

我错过了什么吗?

我是否应该考虑学习 DBrefs ?

D. *_* SM 5

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

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

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

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

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

我是否应该考虑学习 DBrefs ?

它们在很大程度上是一个小众功能。可能不会。