На монгомапене, в чем разница между документом и встроенным документом?

StackOverflow https://stackoverflow.com/questions/3115895

  •  29-09-2019
  •  | 
  •  

Вопрос

Этот пример делает, кажется, что оба используются (included) Для того, чтобы сделать класс постоянную модель, но не ясно, когда я должен использовать один или другой.

Это было полезно?

Решение

А. MongoMapper::Document сохраняется в базе данных как запись верхнего уровня. А. MongoMapper::EmbeddedDocument сохраняется в течение другого документа. Например, скажем, у меня есть приложение для блога. у меня есть Post и Comment модель. Они могут выглядеть что-то подобное:

require 'mongo_mapper'
MongoMapper.database = 'test'

class Post
  include MongoMapper::Document

  key :title
  key :body
  key :comments

  many :comments
end

class Comment
  include MongoMapper::EmbeddedDocument

  key :author
  key :body
end

p = Post.new(:title => 'Some post', :body => 'About something')
p.comments << Comment.new(:author => 'Emily', :body => 'A comment')

p.save

puts Post.all.map(&:inspect)

Будет создавать документ в вашей базе данных Mongo, которая выглядит так:

{ "_id" : ObjectId("4c4dcf4b712337464e000001"),
  "title" : "Some post",
  "body" : "About something",
  "comments" : [
        {
                "body" : "A comment",
                "author" : "Emily",
                "_id" : ObjectId("4c4dcf4b712337464e000002")
        }
] }

С точки зрения взаимодействия с ними через мондомаппер, только MongoMapper::Document Ответ на методы, такие как find и save. Отказ А. MongoMapper::EmbeddedDocument можно получить только через его родительский документ. Примечание этого является то, что вы должны использовать только MongoMapper::EmbeddedDocument Для моделей, которые явно дочерняяся на их родительских моделях и будут использоваться только в контексте этого родителя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top