MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongoid store_in дава произволни резултати

Отне ми известно време, но разбрах отговора. Реших да го публикувам, надявайки се, че ще помогне на другите.

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. npm install -g mongodb не инсталира mongodb глобално на OSX 10.8.4?

  2. Как да интегрирам MongoDB със Solr?

  3. MongoDB Много индекси срещу единичен индекс на масив от поддокументи?

  4. db.collection не е функция, когато използвате MongoClient v3.0

  5. MongoDB обединява свързания брой елементи на колекцията с други резултати от колекцията