2012-08-16 59 views
2

你好我使用mongoid(MongoDB的)的總和去比標準更高:Mongoid其中超過兩個字段

Account.where(:field1.gt => 10) 

但我不知道是否有可能做一個標準在那裏的總和兩個領域大於一些數字。也許這樣的東西(但似乎並沒有工作):

Account.where(:'field1 + field2'.gt => 10) 

也許一些嵌入式JavaScript是需要?謝謝!

+0

你的意思是在查詢中添加一個$自定義功能的地方?這在性能和可擴展性方面將是一個巨大的錯誤。我不使用mongoid,但我知道$哪裏將無法正常工作。 – Sammaye 2012-08-16 09:16:09

回答

0

您可以使用MongoDB的javascript query syntax

所以,你可以這樣做:

Account.collection.find("$where" => '(this.field1 + thist.field2) > 10') 

或在Mongoid 3下面的工作以及

Account.where('(this.field1 + thist.field2) > 10') 

由於Sammaye註釋中介紹了性能penealty因爲JavaScript有來爲每個文檔單獨執行。如果你不經常使用那個查詢,那就沒問題。但如果你這樣做,我會建議添加另一個字段,這將是field1field2的聚合,然後將查詢基於該字段。

1

我建議使用Mongoid 3語法由彼得的建議,但如果你想使這個更高性能,在一些存儲開銷的費用,你可以嘗試這樣的事:

class Account 
    # ... 
    field :field1, :type => Integer 
    field :field2, :type => Integer 
    field :field3, :type => Integer, default -> { field1 + field2 } 

    index({ field3: 1 }, { name: "field3" }) 

    before_save :update_field3 

private 

    def update_field3 
    self.field3 = field1 + field2 
    end 

end 

然後將查詢看起來更像:

Account.where(:field3.gte => 10) 

通知回調更新field3文件更改時。還爲它添加了一個索引。