Я полагаю, что вы ищете все комментарии новее, чем три дня назад? Поскольку ваши Комментарии являются просто внедренными документами, они не существуют без объекта Post, поэтому нет возможности «запросить» их отдельно (на самом деле это будущая функция MongoDB ). Тем не менее, вы можете легко добавить удобный метод, чтобы помочь вам:
class Comment
include MongoMapper::EmbeddedDocument
def self.latest
Post.all(:conditions => {"comments.date" => {"$gt" => 3.days.ago}}).map{|p| p.comments}.flatten
end
end
Этот метод позволит вам получить все комментарии, которые были обновлены за последние три дня, но они не будут в полном порядке. Лучшим решением может быть использование Map / Reduce для получения последних комментариев:
class Comment
include MongoMapper::EmbeddedDocument
def self.latest
map = <<-JS
function(){
this.comments.forEach(function(comment) {
emit(comment.created_at, comment)
});
}
JS
r = "function(k,vals){return 1;}"
q = {'comments.created_at' => {'$gt' => 3.days.ago}}
Post.collection.map_reduce(m,r,:query => q).sort([['$natural',-1]])
end
end
Предостережение: приведенный выше код полностью не проверен и существует только в качестве примера, но теоретически должен возвращать все комментарии за последние три дня, отсортированные в порядке убывания.