Полагаю, вы правы, предполагая, что выборка одного документа более эффективна, чем выборка 15, но вы должны иметь в виду, что документ корневого уровня - это единица измерения квантов, которую вы получите из db. Поэтому, если вы будете хранить дни недели в одном документе, вам придется выбирать неделю из базы данных, даже если вам требуется одна задача.
Другим способом может быть моделирование дня следующим образом:
class Week
include Mongoid::Document
field :year, type: Integer
field :week, type: Integer
embeds_many :days
end
class Day
include Mongoid::Document
field :day, type: String
embedded_in :week
embeds_many :items
validates :day, :in => [:monday, tuesday, ....]
end
Было бы дополнительным преимуществом то, что когда вы хотите узнать, какие недели связаны с кофе, вы можете запросить:
Week.where("days.items.task" => /coffeee/i).all
# Instead of
Week.all.or("monday.items.task" => /coffee/i).or("tuesday.items.task: => /coffee/i)...
Это в первую очередь имеет смысл, потому что неделя является корневым документом, но если вам нужно выполнять ежедневные задачи независимо друг от друга, возможно, вы сделаете дни отдельной коллекцией.
PS: хотел сделать комментарий, но был слишком длинным.