你好我使用mongoid(MongoDB的)的總和去比標準更高:Mongoid其中超過兩個字段
Account.where(:field1.gt => 10)
但我不知道是否有可能做一個標準在那裏的總和兩個領域大於一些數字。也許這樣的東西(但似乎並沒有工作):
Account.where(:'field1 + field2'.gt => 10)
也許一些嵌入式JavaScript是需要?謝謝!
你好我使用mongoid(MongoDB的)的總和去比標準更高:Mongoid其中超過兩個字段
Account.where(:field1.gt => 10)
但我不知道是否有可能做一個標準在那裏的總和兩個領域大於一些數字。也許這樣的東西(但似乎並沒有工作):
Account.where(:'field1 + field2'.gt => 10)
也許一些嵌入式JavaScript是需要?謝謝!
您可以使用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有來爲每個文檔單獨執行。如果你不經常使用那個查詢,那就沒問題。但如果你這樣做,我會建議添加另一個字段,這將是field1
和field2
的聚合,然後將查詢基於該字段。
我建議使用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
文件更改時。還爲它添加了一個索引。
你的意思是在查詢中添加一個$自定義功能的地方?這在性能和可擴展性方面將是一個巨大的錯誤。我不使用mongoid,但我知道$哪裏將無法正常工作。 – Sammaye 2012-08-16 09:16:09