Mongoid store_in产生随机的结果(Mongoid store_in produces

2019-06-24 16:28发布

我使用Rails 3.2.2与2.4.6 mongoid。 为了保持我的收藏小我存储的子对象在使用“store_in”语句sepparate集合的基类。 我的代码如下所示:

class BaseClass
  include Mongoid::Document
end

class ChildClass1 < BaseClass
  store_in :child_1
end  

class ChildClass2 < BaseClass
  store_in :child_2
end

看来,物体得到随机存储或或其他子集。 类型Child1的目的有时候会存储在收集CHILD2。 下面是我在日志中看到令人吃惊的事情:

Started POST "/child_class_1" for 127.0.0.1 at 2012-05-22 10:22:51 -0400
Processing by ChildClass1Controller#create as HTML

MONGODB (0ms) myproject_development['child_2'].insert....

在这情况下从何而来? 这是mongoid,导轨或MongoDB的错误吗?

Answer 1:

我花了一段时间,但我想答案了。 我决定将它张贴,希望这会帮助别人。

Mongoid实现的东西,被称为“单表继承”。 一旦你获得从父类的子类,孩子将被存储父集合添加一个“类型”属性英寸 使用“store_in”讲述MongoDB中明确哪个集合来存储文档。定义store_in在子类中,使mongoid店的一切(包括家长)给定的集合中。 我想使用专用store_in分配为每一个孩子混乱mongoid起来。 然而,结果是文件获得随机存储在任何给定的集合。

这可以在Ruby中使用一个模块混入了通用的功能来解决。 这是在描述相当不错这份文件 。

但我决定不这样做毕竟! 为什么我想这样做的原因是为了保持我的收藏小,希望能获得更好的性能。 谈论一些(10gen公司)的专家后,我认为更好的办法是使用单亲对象集合所有的子元素。 应该有有关MongoDB的性能没有影响,但该解决方案变得更为灵活。 其实这使得更好地利用MongoDB中的无模式的设计。

因此,代码看起来像这样一次:

class BaseClass
  include Mongoid::Document

  ... shared functionality

end

class ChildClass1 < BaseClass
  ...individual functionality...
end  

class ChildClass2 < BaseClass
  ...individual functionality...
end


文章来源: Mongoid store_in produces random results