簡體   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