Mongoid slaat ingesloten documenten en hash-attributen op vrijwel dezelfde manier op databaseniveau op. Het is normaal wanneer u met mongoïde werkt om uw velden in uw modellen te declareren, dus als u een geneste structuur heeft, is het normaal om een ingesloten document te maken. Omdat MongoDB schemaloos is, moet je velden declareren om ze in hetzelfde soort API te presenteren als ActiveRecord. Maar voor sommige gebruikssituaties geeft een hash-attribuut je wat meer flexibiliteit. Het nadeel van die flexibiliteit is dat je beperkt bent tot de Hash API, dus je krijgt geen automatisch gegenereerde attribuutmethoden en je kunt geen bedrijfslogica inkapselen zoals je dat normaal zou doen binnen een modelklasse.
Stel dat u bijvoorbeeld een vragenlijstmodel heeft waarin u veel secties met veel vraag-antwoordparen moet opslaan. Als een belangrijke vereiste van het systeem is dat de beheerder nieuwe secties en vragen kan instellen, dan zou je de antwoorden niet gemakkelijk kunnen modelleren als een normaal ingebed document met expliciete velden voor elke vraag. Voor dat soort dingen is een hash misschien logischer.
Ik weet niet wat uw specifieke vereisten zijn, maar als een ruwe richtlijn zou ik zeggen dat wanneer u met een vast schema werkt, een ingesloten document vasthoudt, maar wanneer u een model met een open einde nodig heeft, overweeg dan Hash-kenmerken.