【发布时间】:2011-10-13 14:07:09
【问题描述】:
假设我的模型是用户和项目。每个用户可以分配到多个项目,每个项目可以分配多个用户。这是典型的多对多关系,可以存储为 (source):
# The user document.
{
"_id" : ObjectId("4d3ed089fb60ab534684b7e9"),
"project_ids" : [ ObjectId("4d3ed089fb60ab534684b7f2") ]
}
# The project document.
{
"_id" : ObjectId("4d3ed089fb60ab534684b7f2"),
"user_ids" : [ ObjectId("4d3ed089fb60ab534684b7e9") ]
}
问题是,我想分配更多描述这种关系的数据,例如用户在项目中的角色(管理员、经理等)。在 RDBMS 中,我只需在连接表中添加一个附加列。在 MongoDB 中,我真的不知道该怎么做。
我应该在用户或项目中创建一个额外的嵌入文档吗?我在想这样的事情:
# The project document.
{
"_id" : ObjectId("4d3ed089fb60ab534684b7f2"),
"assigned_users" : [
{ user_id: ObjectId("4d3ed089fb60ab534684b7e9"), role: "admin" },
...
]
}
但我想查询所有用户的项目会变得相当复杂,对吧?
我正在使用 Mongoid,但如果有任何通用解决方案,我将不胜感激(然后我会弄清楚如何将其映射到 Mongoid;) 另外,我无法将数据库更改为 RDBMS。
【问题讨论】:
标签: database-design mongodb mongoid