Mongoid speichert eingebettete Dokumente und Hash-Attribute auf Datenbankebene auf ziemlich dieselbe Weise. Wenn Sie mit Mongoid arbeiten, ist es normal, Ihre Felder in Ihren Modellen zu deklarieren. Wenn Sie also eine verschachtelte Struktur haben, ist es normal, ein eingebettetes Dokument zu erstellen. Da MongoDB ein schemaloses Mongoid ist, müssen Sie Felder deklarieren, um sie in derselben Art von API darzustellen wie ActiveRecord. Aber für einige Anwendungsfälle gibt Ihnen ein Hash-Attribut etwas mehr Flexibilität. Der Nachteil dieser Flexibilität besteht darin, dass Sie auf die Hash-API beschränkt sind, sodass Sie keine automatisch generierten Attributmethoden erhalten und Geschäftslogik nicht so kapseln können, wie Sie es normalerweise in einer Modellklasse tun würden.
Angenommen, Sie haben ein Fragebogenmodell, in dem Sie viele Abschnitte speichern müssen, die viele Frage-Antwort-Paare enthalten. Wenn eine Hauptanforderung des Systems darin besteht, dass der Administrator neue Abschnitte und Fragen einrichten kann, können Sie die Antworten nicht einfach als reguläres eingebettetes Dokument modellieren, das explizite Felder für jede Frage enthält. Für so etwas könnte ein Hash sinnvoller sein.
Ich weiß nicht, was Ihre spezifischen Anforderungen sind, aber als grobe Richtlinie würde ich sagen, dass Sie, wenn Sie mit einem festen Schema arbeiten, mit einem eingebetteten Dokument arbeiten, aber wenn Sie ein offenes Modell benötigen, Hash-Attribute in Betracht ziehen.