我想按日期排序,然后按评分排序,但我希望将日期四舍五入到最近的半年(或某个时间跨度)。
这将显示按评级排序的最近6个月的效果,然后是按评级排序的最近6个月。
目前我有一个范围:
scope :newer_popular, order_by(:release_date => :desc, :avg_rating => :desc).where(:release_date.ne => 0, :avg_rating.ne => 0 )
显然不会这样做,这会将release_date(一个Date对象)视为连续排序,因此只有恰好在同一时间发布的对象实际上是按等级排序的。
有没有办法在Mongoid中进行这种分面/分组/舍入排序?
答案 0 :(得分:1)
我只是通过评级来命令,并使用发布日期的where条件:
where(:release_date.gte => 6.months.ago.utc).order_by(:avg_rating => :desc)
下一页:
where(:release_date.lt => 6.months.ago.utc, :release_date.gte => 12.months.ago.utc).order_by(:avg_rating => :desc)
或类似的东西。
答案 1 :(得分:1)
如果您在没有数据缩减的情况下显示结果,那么最简单的方法是获取所需的数据并在Ruby中进行编程,这就是我们喜欢它的原因。
如果您想进行一些数据缩减或了解服务器端处理,那么您可以考虑用于操作和分组的聚合框架,它远远超出标准的MongoDB查询语言。
我为其他SO答案构建了聚合管道。如果您想要答案,请告诉我,但可能需要一些时间来解决它。