来自RDMBS背景,很难不考虑像连接一样的思考,特别是在使用无模式的MongoDB环境时。
我在blog上读到,只有当您知道要引用的对象类型时,DBRef才有用。
为什么会这样?当然,他们有更多的用途。
假设我有一个用户集合和雇主集合。许多用户可以引用同一个雇主。对我来说,这是DBRef的完美使用。但是,这与我在博客上看到的内容相矛盾。
当然,我可以将雇主嵌入到每个用户集合中,但是当雇主改变时会发生什么?也许他们雇主改变地址或电话号码或其他东西。如果雇主嵌入在每个用户中,那么我必须更新每个用户的嵌入文档。
这不可能有效。或者可以吗?
答案 0 :(得分:10)
DBRefs是一种数据结构,包括集合名称和对象ID。如果您知道您的集合的名称(如您的示例,雇主),则不需要DBRef。只需将雇主的对象ID存储在您的用户集合中。您可以节省集合名称占用的空间。
当集合名称可以更改时使用DBRef。例如,您有一个评论集合。您希望使用它在博客文章和书页(2个不同的集合)上存储评论。如果要在评论中存储对帖子或页面的引用,则需要使用数据库引用。