sql >> Database >  >> NoSQL >> MongoDB

Mongoid store_in produceert willekeurige resultaten

Het heeft even geduurd, maar ik heb het antwoord gevonden. Ik besloot het te posten, in de hoop dat het anderen zou helpen.

Mongoid implementeert iets dat "overerving van één tafel" wordt genoemd. Zodra u een kindklasse afleidt van een bovenliggende klasse, wordt het kind opgeslagen in de bovenliggende verzameling door een "type" -kenmerk toe te voegen. Het gebruik van "store_in" vertelt mongodb expliciet in welke collectie documenten moeten worden opgeslagen. Het definiëren van de store_in in de child-klasse zorgt ervoor dat mongoid alles (inclusief de ouder) in de gegeven collectie opslaat. Ik denk dat het gebruik van een speciale store_in-toewijzing voor elk kind de mongoïde in de war brengt. Het resultaat is echter dat documenten willekeurig worden opgeslagen in een van de gegeven verzamelingen.

Dit kan in Ruby worden opgelost door een module te gebruiken als mix voor de algemene functionaliteit. Dit wordt vrij goed beschreven in dit document .

MAAR ik heb besloten dit toch niet te doen! De reden waarom ik dit wilde, is om mijn collecties klein te houden, in de hoop betere prestaties te krijgen. Na met enkele (10gen) experts te hebben gesproken, denk ik dat de betere benadering is om de collectie met één ouderobject te gebruiken voor alle onderliggende elementen. Er zou geen impact moeten zijn op de prestaties van mongodb, maar de oplossing wordt veel flexibeler. In feite maakt dit veel beter gebruik van het schemaloze ontwerp in mongodb.

Dus de code ziet er weer zo uit:

class BaseClass
  include Mongoid::Document

  ... shared functionality

end

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

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



  1. Door containers beheerde MongoDB-verbinding in Liberty + Spring Data

  2. Mongodb-verbindingsfout hoewel docker in springboot

  3. Mongo $addToSet met meerdere waarden correcte syntaxis

  4. SqlBulkCopy gebruiken met MongoDB