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