【发布时间】:2013-12-13 01:41:08
【问题描述】:
我有一个使用多个字段的复杂排序顺序。 “条目对象”是由查询定义的第一批中的第一项。我正在尝试创建一个无限滚动条,其中条目项目显示在顶部 - 向下滚动按预期工作并向上滚动条目项目之前的显示项目。
对像“用户名”这样的唯一字段使用简单排序非常简单,但在我的情况下,排序至少需要三个字段才能产生唯一排序。
颠倒排序顺序也不成问题。
问题是如何定义条目对象并使用跳过和限制在排序集合中获取条目对象之后和之前的项目。 afaik 不允许 skip 为负值。
使用 mongoid 和 Rails 来定义排序:
scope :rating_watchable, order_by(avg_rating: :desc, release_date: :desc, title: :asc)
从下面返回的第一个对象是位置 0 的“入口对象”:
Object.rating_watchable.where(:avg_rating.gte => 3).skip(0).limit(BATCH_SIZE)
最后一个查询正确返回对象,如果我颠倒排序顺序,我可以按正确顺序获取对象,但我想不出如何使用相对“where”子句定义相同的条目对象。我需要这个来让跳过/限制以相反的顺序正常工作。
如果有这样的否定跳过当然会很好:
Object.rating_watchable.where(:avg_rating.gte => 3).skip( -BATCH_SIZE * batch_num ).limit(BATCH_SIZE)
也许我错过了一些更好的方法来做到这一点?
【问题讨论】: