Ruby on rails 在MongoDB中使用关系

Ruby on rails 在MongoDB中使用关系,ruby-on-rails,mongodb,Ruby On Rails,Mongodb,我有两个系列,即员工和部门。在这里,我引用了department using中employee collection的department\u id字段has\u many and own\u to class Employee include Mongoid::Document field :name, type: String field :age, type: Integer field :empid, type: String field :manager_

我有两个系列,即员工和部门。在这里,我引用了department using中employee collection的department\u id字段has\u many and own\u to

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,帮助我”

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

Mongo没有连接查询的概念,因此简单关系的查询成本要比SQL数据库中的查询成本高得多

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

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


我不熟悉Mongo for Rails,因此无法给出具体的代码示例。

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

Mongo没有连接查询的概念,因此简单关系的查询成本要比SQL数据库中的查询成本高得多

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

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


我不熟悉Mongo for Rails,因此无法给出具体的代码示例。

Mongo不是关系数据库,但它并不反对关系。它们的关键是尝试和“嵌套”关系(例如,department类将所有教师作为子对象),或者在代码中进行连接,而不是在DB中。至少是阿福。更多信息:注意到这一点,我将+1这个:)你是对的,但是对于刚开始使用mongo的人来说,最好让他们忘记关系模型,以面向文档的方式工作,然后当他们绝对需要关系时,他们可以用正确的方式来做。mongo不是关系数据库,但它并不反对关系。它们的关键是尝试和“嵌套”关系(例如,department类将所有教师作为子对象),或者在代码中进行连接,而不是在DB中。至少是阿福。更多信息:注意到这一点,我将+1这个:)你是对的,但是对于刚开始在mongo工作的人来说,最好让他们忘记关系模型,以面向文档的方式工作,然后当他们绝对需要关系时,他们可以用正确的方式来做。