Mongoid关系属性

时间:2012-10-21 08:35:43

标签: mongodb mongoid

保存关系属性的最佳方法是什么?例如,我有模型Person和Project(M:N关系)。我想在项目中拯救人的角色。在关系数据库中,它将是联结表person_project中的一个属性。在Mongoid(RoR)中实现此功能的最佳方法是什么?

第二个问题:我应该在两个方面还是仅仅一侧为多对多关系保存ID?

2 个答案:

答案 0 :(得分:0)

文档:http://mongoid.org/en/mongoid/docs/relations.html#has_and_belongs_to_many

class Person
  include Mongoid::Document
  has_and_belongs_to_many :projects
end

class Project
  include Mongoid::Document
  has_and_belongs_to_many :persons
end

Mongoid使用Arrays在两个集合中存储ID。 Person集合有一个字段project_idsProject集合有一个字段person_ids

答案 1 :(得分:0)

我不会在项目中存储用户或特定用户角色(超级用户除外,或出于最终缓存的原因)。仅仅因为有两个生命周期,当你做项目时你可能不会乱用用户。 首先,我会将角色设置存储在以下人员中:

{
 _id : Obj{},
 projects : [
   {project_one : role_name}, //use a name if name is unique if not use project_id as key
   {project_two : role_name}
 ]
}

或者更容易,但需要更多空间

{
_id : Obj{},
projects : [
  {project_id : project_one,
   role : role_name},...
]
}

即使您可以在项目中存储一些与用户相关的内容,我也总是会针对用户测试角色。