【问题标题】:Order Mongoid results by dynamic, user-specific value按动态的、用户特定的值对 Mongoid 结果排序
【发布时间】:2012-07-02 07:42:04
【问题描述】:

我有一个 Mongoid 模型,我想通过在模型和 current_user 之间实时计算的分数对结果进行排序。假设Thing有一个实例方法match_score

  def match_score(user) #can be user object too
    score = 100
    score -= 5 if user.min_price && !(price < user.min_price)
    score -= 10 if user.max_price && !(price > user.max_price)
    #... bunch of other factors...
    return [score, 0].max
  end

是否可以根据为特定用户返回的值对任何查询的结果进行排序?

【问题讨论】:

    标签: ruby-on-rails mongodb mongoid database


    【解决方案1】:

    MongoDB 不支持排序中的任意表达式。基本上,您只能指定一个字段和一个方向(asc/desc)。

    像您这样复杂的排序逻辑,唯一的方法就是在应用程序中进行。或者查看其他数据存储。

    【讨论】:

    • 只是一个小问题:切换数据存储不会让您免于计算每个事物/用户组合的分数。
    • 是的,但是使用mysql(例如),可以在查询中做到这一点,无需预先计算。我不知道是否可以有效地预先计算。
    猜你喜欢
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多