一周前我开始学习 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 吗?
DBRef 的要点是它允许从单个字段引用数据库和集合。没有它,您将需要两个字段[*]。
[*] 从技术上讲,您可以使用单个字段,例如,包含数据库和集合引用的哈希本身,但这本质上与 DBRef 相同,但没有标签。
如果您想引用其他数据库中的文档,DBRef 可能会很有用。它的用处受到以下事实的限制:通常您仍然需要在应用程序中处理跨数据库操作,因为驱动程序和服务器通常不会为您无缝地执行此操作。例如, DBRef不能直接与聚合框架一起使用。
DBRef 实际上只是提供了一种更方便的方式来存储数据库+集合名称对。
如果您的所有集合都在同一个数据库中,则您根本不需要 DBRef(实际上它只会妨碍您)。
我应该考虑学习 DBrefs 吗?
它们在很大程度上是一个利基功能。可能不是。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句