sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongoid store_in producerer tilfældige resultater

Det tog mig et stykke tid, men jeg fandt ud af svaret. Jeg besluttede at sende det, i håb om at det vil hjælpe andre.

Mongoid implementerer noget, der kaldes "enkeltbordsarv". Så snart du udleder en underordnet klasse fra en overordnet klasse, vil barnet blive gemt i forældresamlingen ved at tilføje en "type"-attribut. Brug af "store_in" fortæller mongodb eksplicit, hvilken samling dokumenter skal opbevares i. Definering af store_in i den underordnede klasse får mongoid til at gemme alt (inkl. forælderen) i den givne samling. Jeg gætter på, at brug af en dedikeret store_in-opgaver til hvert barn roder mongoid. Resultatet er dog, at dokumenter bliver gemt tilfældigt i enhver af de givne samlinger.

Dette kan løses i Ruby ved at bruge et modul som mixin til den fælles funktionalitet. Dette er beskrevet ret godt i dette dokument .

MEN jeg besluttede alligevel ikke at gøre dette! Grunden til, at jeg ønskede dette, er for at holde mine samlinger små, i håb om at få bedre ydeevne. Efter at have talt med nogle (10gen) eksperter tror jeg, at den bedre tilgang er at bruge en enkelt forælder objektsamling til alle underordnede elementer. Der burde ikke være nogen indflydelse på mongodbs ydeevne, men løsningen bliver meget mere fleksibel. Faktisk gør dette meget bedre brug af det skemaløse design i mongodb.

Så koden vil se sådan ud igen:

class BaseClass
  include Mongoid::Document

  ... shared functionality

end

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

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



  1. Installation og kørsel af MongoDB på OSX

  2. Log MongoDB-forespørgsler med Spring Boot

  3. Hvad er en markør i MongoDB?

  4. Hvordan sikrer man en unik vare i et array baseret på specifikke felter - mongoDB?