嗨我正在使用mongoid(mongodb)来超过标准:
Account.where(:field1.gt => 10)
但是我想知道是否有可能做出两个字段之和大于某个数字的标准。也许这样的事情(但似乎不起作用):
Account.where(:'field1 + field2'.gt => 10)
也许需要一些嵌入式JavaScript?谢谢!
答案 0 :(得分:1)
我建议使用Piotr建议的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
的回调。还为它添加了一个索引。
答案 1 :(得分:0)
您可以使用MongoDB的javascript query syntax。
所以你可以这样做:
Account.collection.find("$where" => '(this.field1 + thist.field2) > 10')
或者在Mongoid 3中,以下内容也可以使用
Account.where('(this.field1 + thist.field2) > 10')
正如Sammaye在评论中提到的,它引入了性能漏洞,因为必须单独为每个文档执行javascript。如果您不经常使用该查询,则可以。但是,如果你这样做,我会建议添加另一个字段,该字段将是field1
和field2
的聚合,然后将查询基于该字段。