1

我有两个集合,即员工和部门。在那我使用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,帮帮我

4

1 回答 1

4

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

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

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

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

我对 Mongo for Rails 不熟悉,所以不能给你具体的代码示例。

于 2012-07-19T14:22:54.023 回答