Отне ми известно време, но разбрах отговора. Реших да го публикувам, надявайки се, че ще помогне на другите.
Mongoid имплементира нещо, което се нарича "наследяване на една таблица". Веднага след като извлечете дъщерен клас от родителски клас, детето ще бъде съхранено в родителската колекция, добавяйки атрибут "тип". Използването на "store_in" указва изрично на mongodb в коя колекция да съхранява документите. Дефинирането на store_in в дъщерния клас кара mongoid да съхранява всичко (включително родителя) в дадената колекция. Предполагам, че използването на специални store_in задания за всяко дете обърква mongoid. Резултатът обаче е, че документите се съхраняват произволно във всяка от дадените колекции.
Това може да бъде решено в Ruby с помощта на модул като mixin за общата функционалност. Това е описано доста добре в този документ .
НО все пак реших да не правя това! Причината, поради която исках това, е да запазя колекциите си малки, надявайки се да постигна по-добро представяне. След разговор с някои (10gen) експерти смятам, че по-добрият подход е да се използва колекцията от единични родителски обекти за всички дъщерни елементи. Не трябва да има въздействие върху производителността на mongodb, но решението става много по-гъвкаво. Всъщност това прави много по-добро използване на безсхемния дизайн в mongodb.
Така че кодът ще изглежда отново така:
class BaseClass
include Mongoid::Document
... shared functionality
end
class ChildClass1 < BaseClass
...individual functionality...
end
class ChildClass2 < BaseClass
...individual functionality...
end