MongoDB引用对象(Mongo DBRef)有什么问题?

4

如果你来自RDMBS背景,很难不去想到像联接这样的东西,特别是在使用无模式MongoDB环境时。

我在一篇博客上读到,只有当你知道所引用对象的类型时,DBRefs才有用。

为什么会这样?它们肯定有更多的用途。

比如我有一个用户集合和一个雇主集合。许多用户可以引用同一个雇主。对我来说,这是DBRef的完美应用。然而,这与我在那篇博客上读到的相矛盾。

当然,我可以将雇主嵌入到每个用户集合中,但如果雇主发生变化怎么办?也许他们换了地址或电话号码之类的。如果雇主嵌入到每个用户中,那么我必须更新每个用户的嵌入文档。

这肯定不高效。或者说它真的高效吗?


4
你是否阅读过这个链接?你似乎错过了第三种最常见的选项,即在字段中仅存储另一个文档的ID并手动管理引用 :-) - Cameron
1
请注意,作者声称“[DBRefs]因为它们受Mongo支持”并不完全正确。这是一个约定,驱动程序可以使用它来执行DBRef字段的惰性获取,但没有服务器端支持。这是一种约定,由驱动程序来支持(大多数驱动程序都支持)。 - Remon van Vliet
1个回答

10

DBRefs是一种数据结构,包括集合名称和对象ID。如果您知道集合的名称(就像在您的示例中的employer),则不需要DBRef。只需将雇主的对象ID存储在您的用户集合中即可。您可以节省集合名称占用的空间。

当集合名称可能会更改时,请使用DBRef。例如,您有一个评论集合。您想要将其用于存储对博客文章和书页的评论(2个不同的集合)。如果您想要在评论中存储对文章或页面的引用,则需要使用数据库引用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接