我应该如何在MongoDB中存储属于多个其他对象的对象?

时间:2012-11-05 03:19:08

标签: mongodb database-design database nosql

我最近使用MongoDB开展了一个项目。基本上,我网站的核心要素是“项目”。每个项目都将包含一个嵌套的“字符串”对象,该对象将包含大量字符串......因此,每个项目都非常庞大,可以接近一兆字节或更多。因此,我希望将项目放在他们自己的集合中。

我遇到的问题是我不确定如何将用户分配到项目中。用户是否应该包含他们注册的项目列表,或者项目是否应包含用户列表?我什么时候应该选择其中一个?还有更好的方法吗? (我有一段时间没有触及过MongoDB,所以我有点生疏了)

2 个答案:

答案 0 :(得分:1)

我不能立刻想到两者之间有任何严重的停止差异。我认为维护用户端可能更容易:

  • 用户取消订阅项目,因为您只修改了那个可能只有原子锁的用户行,这与多个用户可能同时尝试取消订阅的项目行不同。因此,用户端可能会更好地进行更新和并发。
  • 上一点也适用于订阅项目的用户。
  • 用户删除,您只需删除用户行...简单

因此,考虑到我想到的这些直接的事情,我可能会选择在用户中嵌入项目。

答案 1 :(得分:0)

看看http://www.mongodb.org/display/DOCS/Schema+Design。适用于您案例的指南是

  

通常,对于实体之间的“包含”关系,应选择嵌入。不使用链接时使用链接会导致数据重复。

如果用户可以注册多个项目,并且项目可以注册多个用户,则最好为项目和用户设置单独的集合。