我正在学习如何使用mongo与红宝石使用mongoid宝石。我创建了一个简单的待办事项应用程序作为学习体验。我每星期一星期一到星期一,每个星期都有许多待办事项。我的文件将是这个样子:Mongoid:如何模拟一周内的嵌入式文档?
week = {
'year': 2012,
'week': 10,
'monday': [
{'task': 'take out the trash', 'effort_points': 1},
{'task': 'build a house', 'effort_points': 5}
],
'tuesday': [],
'wednesday': [],
'thursday': [],
'friday': []
}
到目前为止,我有一些类,看起来像这样(有些可能是伪代码):
class Week
include Mongoid::Document
field :year, type: Integer
field :week, type: Integer
embeds_one :day, as: :monday
embeds_one :day, as: :tuesday
embeds_one :day, as: :wednesday
embeds_one :day, as: :thursday
embeds_one :day, as: :friday
end
class Day
include Mongoid::Document
embedded_in :week
embeds_many :items
end
class Item
include Mongoid::Document
embedded_in :day
field :task
field :effort_points
end
如何适当这些对象进行建模使用mongoid?
嗯...似乎这将违背使用Mongo的优势。由于这些“任务”的数据量非常小,因此将它们组合在一起(并将它们嵌入到更大的文档中)是有利的,因此获取和显示记录效率最高。我对Mongo的表现并不了解,但我认为提取单个文档比返回25个文档更有效率。你怎么看? – Andrew 2012-03-07 21:25:39
如果您正在使用的字段上有一个索引来选择它们,它是1个数据库调用,速度非常快。与您所谈论的SQL数据库相比,您可以通过将相关内容保存在单个文档中来避免执行JOIN。例如,如果任务有很多“注释”,则可以将这些任务留在任务中,而不必加入“笔记”表以检索它们。 – nicholaides 2012-03-07 23:31:26