在MongoDB中使用关系

时间:2012-07-19 10:06:37

标签: ruby-on-rails mongodb

我有两个馆藏,即员工和部门。在那里我使用has_many和belongs_to

引用了部门的员工集合的department_id字段。
class Employee
   include Mongoid::Document
   field :name, type: String
   field :age, type: Integer
   field :empid, type: String
   field :manager_id, type: Integer
   field :department_id, type:Integer
   attr_accessible :age, :empid,  :name, :department_id, :manager_id
   validates_presence_of :name
   validates_uniqueness_of :empid
   belongs_to :department
end

class Department
  include Mongoid::Document
    field :name, type: String
    attr_accessible :name
    has_many :employees
end

现在我想使用员工推荐部门集合的_id,帮助我

1 个答案:

答案 0 :(得分:4)

这个问题从标题本身来说本质上是有缺陷的。您可能知道,但Mongo不是关系数据库,因此您应该避免将其用于高度关系数据模型。

Mongo没有JOIN查询的概念,因此查询的简单关系比在SQL数据库中查询要贵得多。

管理这种关系的传统方式是在关系的一侧保留一个id列表。如果您经常询问"哪些员工属于x部门?"然后在每个Department对象上保留一个employee_id列表。然后你可以通过id查找。如果您经常询问"员工属于哪个部门?",那么您所要做的就是在每个Employee对象上存储department_id,然后在Department数据库中查询它。

如果您不必在Departmental上下文之外使用Employees,您可能需要考虑在Department对象中嵌入完整的员工文档列表。

我不熟悉Mongo for Rails,所以我无法给你特定的代码示例。