繁体   English   中英

MongoDB(Mongoid)与其他数据(附加字段)的多对多关系

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM