【发布时间】:2018-06-01 14:11:21
【问题描述】:
我有两个名为 "Books" 和 "Authors" 的集合。另外在书籍收藏中还有一个名为Author的子文档,如下图所示
[{
"Id" : "3535345345",
"Title" : "Book Name",
"Published" : "2015-02-20",
"Author" : {
"Id" : "344567656",
"FirstName" : "Alex",
"LastName" : "Tyler"
}
},
{
"Id" : "3535967667",
"Title" : "Another Book",
"Published" : "2016-08-12",
"Author" : {
"Id" : "344567656",
"FirstName" : "Alex",
"LastName" : "Tyler"
}
}]
如您所见,"Author" 文档在文档中重复,以使查询更快/更好。正如我之前提到的,作者被记录在另一个集合中,并且 hust 3 列作者包含在书籍中。
第一个问题是:“这种结构对 MongoDB 来说是真的吗?”
第二个问题是:“当我更新作者的姓氏时,最佳做法是什么?我应该怎么做才能更新书籍中的真实位置。”我尝试通过引用作者集合中的 ID 来更新,但在大数据场景中我认为我不是最佳选择。
谢谢
【问题讨论】:
-
作者在文档中被复制如何使查询更快/更好?
-
我的感觉是你不需要两个集合。由于 MongoDB 完全是无模式的,为什么不将 Author 作为单个唯一文档存储在 Books 集合本身中,并将其在数组中引用的书籍的所有 id 作为键值对之一作者文件?甚至查询也会更简单。
-
我将通过提供样品来回答您的问题。第一个:从一个文档中查询书名和作者的名字和姓氏比通过作者的 objectid 查询另一个集合更好或更快。您可以想象 MSSQL Server 或其他 RDBMS 中的 INNER JOIN 查询。第二个:在我们的场景中这是不可能的,但是如果作者有 10 万本书怎么办?有可能超出 mongoDB 文档限制
-
在现实世界中,没有作者可以拥有 10 万本书
-
所以我希望我的第二条评论是你现在告诉我的。让我告诉你一些其他的事情......你不能对冗余以提高效率说“是”,同时又谈论大数据,兄弟。
标签: mongodb data-structures database-design architecture foreign-keys