Jul*_*era 5 database-design mongodb mongoid
假设我的模型是用户和项目。每个用户可以分配给多个项目,每个项目可以分配多个用户。这是典型的多对多关系,可以存储为(源):
# The user document.
{
"_id" : ObjectId("4d3ed089fb60ab534684b7e9"),
"project_ids" : [ ObjectId("4d3ed089fb60ab534684b7f2") ]
}
# The project document.
{
"_id" : ObjectId("4d3ed089fb60ab534684b7f2"),
"user_ids" : [ ObjectId("4d3ed089fb60ab534684b7e9") ]
}
Run Code Online (Sandbox Code Playgroud)
问题是,我想分配更多描述这种关系的数据,例如用户在项目中拥有的角色(管理员、经理等)。在 RDBMS 中,我只需向连接表添加一个附加列。在 MongoDB 中,我真的不知道该怎么做。
我应该在用户或项目中创建额外的嵌入文档吗?我在想这样的事情:
# The project document.
{
"_id" : ObjectId("4d3ed089fb60ab534684b7f2"),
"assigned_users" : [
{ user_id: ObjectId("4d3ed089fb60ab534684b7e9"), role: "admin" },
...
]
}
Run Code Online (Sandbox Code Playgroud)
但我想获取所有用户项目的查询会变得相当复杂,对吧?
我正在使用 Mongoid,但如果有任何通用解决方案,我将不胜感激(然后我将弄清楚如何将其映射到 Mongoid;)此外,我无法将数据库更改为 RDBMS。
User将您所知道的有关某个集合的所有信息存储在集合中怎么样Users?
{
"_id": ObjectID("..."),
"projects": [
{ "role": "admin", "project_id": ObjectId("...") },
{ "role": "manager", "project_id": ObjectId("...") }
]
}
Run Code Online (Sandbox Code Playgroud)
查询将在集合上进行Users。
// find all admins on a project, for example
db.Users.find( { "projects" :
{ "role" : "admin", "project_id": ObjectId("...") } })
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1376 次 |
| 最近记录: |