2012-07-02 50 views
0

我有一個Mongoid模型,並且我想要通過在模型和current_user之間實時計算得分來排序結果。假設Thing有一個實例方法match_score通過動態的,用戶特定的值來訂購Mongoid結果

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 

是否有可能通過該值的任何查詢的結果排序,返回一個特定的用戶?

回答

3

MongoDB在排序中不支持任意表達式。基本上,你只能指定一個字段和一個方向(asc/desc)。

有了像你這樣複雜的排序邏輯,唯一的方法就是在應用程序中執行它。或者看看另一個數據存儲。

+0

只是一個小小的問題:切換數據存儲不會節省您計算每個Thing/User組合的得分。 – Matt

+0

是的,但與MySQL(例如),可以在查詢中做到這一點,無需預先計算。我不知道是否有可能有效地預先計算這一點。 –