为什么MongoDB推荐双向引用?Isn';这不就是循环引用吗?
参考资料: 在MongoDB的一篇教程文章中,它特别鼓励双向引用。如您所见,Person文档引用Tasks文档,反之亦然为什么MongoDB推荐双向引用?Isn';这不就是循环引用吗?,mongodb,circular-reference,Mongodb,Circular Reference,参考资料: 在MongoDB的一篇教程文章中,它特别鼓励双向引用。如您所见,Person文档引用Tasks文档,反之亦然 我认为在大多数情况下应该避免循环引用。该网站没有解释为什么它对MongoDB不是问题。请有人帮我理解为什么这在MongoDB中是可能的,因为它在SQL中是一个很大的禁忌?我知道这更像是一个理论问题,但如果有充分的理由,我想在我正在研究的数据库中实现这种类型的设计。如果你从中得出一个循环引用,它只是一个循环引用 意思:假设您想将Mongo文档打印成JSON字符串,以便在浏览器
我认为在大多数情况下应该避免循环引用。该网站没有解释为什么它对MongoDB不是问题。请有人帮我理解为什么这在MongoDB中是可能的,因为它在SQL中是一个很大的禁忌?我知道这更像是一个理论问题,但如果有充分的理由,我想在我正在研究的数据库中实现这种类型的设计。如果你从中得出一个循环引用,它只是一个循环引用 意思:假设您想将Mongo文档打印成JSON字符串,以便在浏览器中打印。您不想在任务部分下打印一堆ID,而是想打印实际名称。在这种情况下,您必须按照ID打印名称。 但是:如果您现在进入对象并解析所有者对象后面的ID,您将再次打印您的个人。如果你用这种方式编程的话,这种情况可能会持续下去。如果你不知道,那只是一堆身份证 编辑:根据您的实现,ID不会自动解析,因此不会引起头痛 有一件事:根据您的数据结构和性能考虑,将任何对象直接放入父文档有时会更容易。在两侧引用ID仅在多对多关系中才有意义
HTH谢谢@Codebaard。我认为有一种特殊的方法可以防止双向引用引起的潜在问题。那将是我的下一个任务。正如您所指出的,我计划在多对多关系中使用它,但我也可能会探讨它是否可以提高频繁阅读文档的阅读性能(比如在person文档中嵌入任务文档的子集,比如10个大多数任务)。很高兴我能帮上忙。把我的答案标记为解决方案。
db.person.findOne()
{
_id: ObjectID("AAF1"),
name: "Kate Monster",
tasks [ // array of references to Task documents
ObjectID("ADF9"),
ObjectID("AE02"),
ObjectID("AE73")
// etc
]
}
db.tasks.findOne()
{
_id: ObjectID("ADF9"),
description: "Write lesson plan",
due_date: ISODate("2014-04-01"),
owner: ObjectID("AAF1") // Reference to Person document
}