【问题标题】:using Relations in MongoDB在 MongoDB 中使用关系
【发布时间】:2012-07-19 10:06:37
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails mongodb


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • Mongo 不是关系数据库,但它不是 Against 关系。他们的关键是尝试和“嵌套”关系[例如。部门类将所有教师作为子对象] 或在代码中进行连接,而不是在数据库中。至少AFAIK。更多信息:mongodb.org/display/DOCS/Schema+Design 注意到这一点,我会 +1 :)
    • 你是对的,但是对于刚开始使用 mongo 的人来说,最好让他们忘记关系模型并以面向文档的方式工作,然后当他们绝对需要关系时,他们可以这样做正确的方式。
    猜你喜欢
    • 2011-08-04
    • 2019-10-18
    • 2013-08-27
    • 2011-03-02
    • 2016-01-21
    • 1970-01-01
    • 2017-04-05
    • 2020-10-08
    • 1970-01-01
    相关资源
    最近更新 更多