MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Einbetten von Nachrichtenantworten in die übergeordnete Nachricht mit mongodb unter Verwendung von mongoid

Ob es Best Practice ist oder nicht, ist ein höchst umstrittenes Thema. Beispielsweise müssen Sie die Beschränkung der Objektgröße beachten (derzeit 4 MB, wird aber bald erhöht).

Zu Ihrer Frage:Ich schlage vor, dass Sie wechseln

  embeds_many :replies, :class_name => 'Message'
  embedded_in :message, :inverse_of => :replies

zu

  embeds_many :replies, :class_name => 'Message'
  referenced_in :message

Und Sie müssen auch beide Verbindungen manuell angeben (das sollte kein Problem sein, da sie wahrscheinlich sowieso unveränderlich sind).

irb(main):002:0> msg1 = Message.new :subject => 'new question'
=> #<Message _id: 4cc7699f457601d7e8000001, created_at: nil, body: nil, updated_at: nil, subject: "new question", read_at: nil, sender_deleted: false, message_id: nil, recipient_deleted: false>
irb(main):003:0> msg2 = Message.new :subject => 'first comment'
=> #<Message _id: 4cc769b6457601d7e8000002, created_at: nil, body: nil, updated_at: nil, subject: "first comment", read_at: nil, sender_deleted: false, message_id: nil, recipient_deleted: false>
irb(main):005:0> msg2.message = msg1
=> #<Message _id: 4cc7699f457601d7e8000001, created_at: nil, body: nil, updated_at: nil, subject: "new question", read_at: nil, sender_deleted: false, message_id: nil, recipient_deleted: false>
irb(main):007:0> msg1.replies << msg2
=> [#<Message _id: 4cc769b6457601d7e8000002, created_at: nil, body: nil, updated_at: nil, subject: "first comment", read_at: nil, sender_deleted: false, message_id: BSON::ObjectId('4cc7699f457601d7e8000001'), recipient_deleted: false>]
irb(main):008:0> msg1.save
=> true