[英]MongoDB (Mongoid) many-to-many relationship with additional data (additional fields)
假设我的模型是用户和项目。 每个用户都可以分配到许多项目,每个项目可以分配许多用户。 这是典型的多对多关系,可以存储为( 源 ):
# 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。
如何在Users
集合中存储您对User
所有信息?
{
"_id": ObjectID("..."),
"projects": [
{ "role": "admin", "project_id": ObjectId("...") },
{ "role": "manager", "project_id": ObjectId("...") }
]
}
将在Users
集合上进行查询。
// find all admins on a project, for example
db.Users.find( { "projects" :
{ "role" : "admin", "project_id": ObjectId("...") } })
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.