我正在学习MongoDB,我有一个问题:你如何代表多对多或多对一的关系?在标准SQL DB中,它很简单:
Parent Table has fields ID (primary key) and Name.
Child Table has fields ID (primary key) and Name
Parent-Child-Relationship Table has fields ID (primary key), ParentID and ChildID
insert into table Parent (ID, Name) values (1, "Bob");
insert into table Child (ID, Name) values (1, "Mahmoud");
insert into table Parent-Child-Relationship (ID, ParentID, ChildID) values (1,1,1);
但我还没想出如何在MongoDB中做到这一点。我能做到:
db.parent.save({name: "Bob", children: ["Mahmoud"]});
但那我怎么能为Mahmoud创造另一个父母(说“玛丽”)?
我错过了一些明显的东西吗?请帮忙。我是NoSQL技术的完全新手。
答案 0 :(得分:1)
简短的回答是你没有。
10Gen会告诉你的答案是使用一个父文件,以及代表孩子的子文档。
但是,请不要这样做,因为Mongo中的子文档查询是有限且较慢的。
每个人最终做的是在子项上存储父ID,在应用程序级别执行多个查询/连接。
答案 1 :(得分:1)
没有什么可以阻止你创建另一个父母,如下所示:
db.parent.save({name: "Jane", children: ["Mahmoud"]})
但我会说你错过了这一点。在面向文档的数据库中以类似行的方式拆分数据通常是个坏主意。一切都取决于应用程序逻辑,但如果你想反映家庭数据,你可以试试像这样的结构:
db.family.insert({mother: {name: "Jane", age: 27}, father: {name: "Bob", age: 29}, children: [{name: "Mahmoud", age: 2}], })