假设我有一个文档和一个作者集合。我可以通过两种方式设计它:
第一种方式:
documents
{_id:1, title:"document 1", author:"John", age: 34}
{_id:2, title: "document 2", author: "Maria", age:42 }
{_id:3, title: "document 3", author: "John", age: 34}
authors
{_id:1, name:"John", age:34}
{_id:2, name:"Maria", age:42}
第二种方式:
documents
{_id:1, title:"document 1", id_author:1}
{_id:2, title: "document 2", id_author: 2}
{_id:3, title: "document 3", id_author: 1}
authors
{_id:1, name:"John", age:34}
{_id:2, name:"Maria", age:42}
第一种方法很好,因为我在检索文档时不必模拟 Join,我拥有文档集合中的所有数据。但是,另一方面,如果我必须改变 Maria 的年龄,我必须在两个系列中都这样做。
第二种方式相反,如果我需要一个文档及其作者的年龄,我需要先查询文档,然后再查询作者。但好消息是,当我必须更改 Maria 的年龄时,我只需要在作者集合中进行。
那么,哪种解决方案更好?我想您在作者集合中需要的字段越多,您使用第二种方式的可能性就越大。但是,如果我使用第一种方式,是否可以使用一个查询来更新两个集合中 Maria 的年龄?
哪个是最常用的解决方案?