问题描述:
例如在关系数据库中有一个Team表,一个User表,两者是多对多的关系,即一个Team可以有多个User,一个User也可能属于多个Team,请问这样的关系在MongoDB中如何存储?
如果是一对多,我知道可以用嵌套,但不知道如何处理多对多的关系,请指教。【来自山贼】
如果是一对多,我知道可以用嵌套,但不知道如何处理多对多的关系,请指教。【来自山贼】
问题解答:
如何处理好多对多的关系可谓是NoSQL的精髓所在。理论上,可以在一个集合中完成存储,不过实际上这样的情况非常罕见。这是由于查询的多样性所导致的,若是只有一种类型的查询,则这种多对多的关系放在一个良好设计的集合中,虽然会有大量的冗余,但是效率一定是最高的。如何设计这种数据库的关键就是看你有多少种查询,每一种的频率是多少,使用的其他要求是什么样的。对于不同的查询,同样的数据库设计的性能也是大不一样。还有一点,一般不要拆成三个集合,这是传统的关系型数据库的思维方式。都NoSQL了一定要换个角度思考问题。常见的情况就是拆成两个集合,然后有一部分冗余,对最常用的查询做一个索引。这个还得多多实践。【Mars】
1、Team 里面存一个 teammates: [] 存 User 的 _id 或其它索引值,这样就知道一个 team 有哪些 user
2、User 可以反查 Team 的 find({teammates: _id}),这样就知道一个 user 在哪些 team【理想】
2、User 可以反查 Team 的 find({teammates: _id}),这样就知道一个 user 在哪些 team【理想】
与关系数据库类似,分开两个文档存储,
然后其中一个文档的ID列表存在另一个文档中【jarod】
然后其中一个文档的ID列表存在另一个文档中【jarod】