На монгомапене, в чем разница между документом и встроенным документом?
-
29-09-2019 - |
Вопрос
Этот пример делает, кажется, что оба используются (include
d) Для того, чтобы сделать класс постоянную модель, но не ясно, когда я должен использовать один или другой.
Решение
А. 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
Для моделей, которые явно дочерняяся на их родительских моделях и будут использоваться только в контексте этого родителя.