为什么 MongoDB 推荐双向引用?不就是循环引用吗?
why does MongoDB recommend two-way referencing? Isn't it just circular referencing?
参考资料material:
https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-2
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
}
在 MongoDB 的教程 post 中,它特别鼓励双向引用。如您所见,Person 文档引用 Tasks 文档,反之亦然。
我认为在大多数情况下应该避免循环引用。尽管该站点没有解释为什么它对 MongoDB 不是问题。请有人帮助我理解为什么这在 MongoDB 中是可能的,而它在 SQL 中是一个很大的禁忌?我知道这更像是一个理论问题,但如果有令人信服的理由,我想在我正在处理的数据库中实现这种类型的设计。
它只是一个循环引用,如果你从中提取的话。
含义:假设您想将 Mongo 文档打印到某个 JSON-String 以在您的浏览器中打印它。您不想在 Tasks-Section 下打印一堆 ID,而是要打印实际名称。在这种情况下,您必须遵循 ID 并打印名称。
但是:如果您现在进入该对象并解析所有者对象后面的 ID,您将再次打印您的 Person。如果您以这种方式编程,这可能会无限期地继续下去。如果你不这样做,它只是一堆 ID。
编辑:根据您的实施,ID 不会自动解析,因此不会造成麻烦。
一件事:根据您的数据结构和性能考虑,有时将任何对象直接放入您的父文档中会更容易。双方引用 ID 仅在多对多关系中才有意义。
HTH
参考资料material: https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-2
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
}
在 MongoDB 的教程 post 中,它特别鼓励双向引用。如您所见,Person 文档引用 Tasks 文档,反之亦然。
我认为在大多数情况下应该避免循环引用。尽管该站点没有解释为什么它对 MongoDB 不是问题。请有人帮助我理解为什么这在 MongoDB 中是可能的,而它在 SQL 中是一个很大的禁忌?我知道这更像是一个理论问题,但如果有令人信服的理由,我想在我正在处理的数据库中实现这种类型的设计。
它只是一个循环引用,如果你从中提取的话。
含义:假设您想将 Mongo 文档打印到某个 JSON-String 以在您的浏览器中打印它。您不想在 Tasks-Section 下打印一堆 ID,而是要打印实际名称。在这种情况下,您必须遵循 ID 并打印名称。 但是:如果您现在进入该对象并解析所有者对象后面的 ID,您将再次打印您的 Person。如果您以这种方式编程,这可能会无限期地继续下去。如果你不这样做,它只是一堆 ID。
编辑:根据您的实施,ID 不会自动解析,因此不会造成麻烦。
一件事:根据您的数据结构和性能考虑,有时将任何对象直接放入您的父文档中会更容易。双方引用 ID 仅在多对多关系中才有意义。
HTH