嗨,我正在使用 mongoid (mongodb) 来超越标准:
Account.where(:field1.gt => 10)
但我想知道是否可以制定一个标准,其中两个字段的总和大于某个数字。也许是这样的(但似乎不起作用):
Account.where(:'field1 + field2'.gt => 10)
也许需要一些嵌入式javascript?谢谢!
我建议使用 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
请注意文档更改时要更新的回调。还为它添加了一个索引。
您可以使用 MongoDB 的javascript 查询语法。
因此,您可以执行以下操作:
Account.collection.find("$where" => '(this.field1 + thist.field2) > 10')
或者在 Mongoid 3 中,以下内容也可以使用
Account.where('(this.field1 + thist.field2) > 10')
正如 Sammaye 在评论中提到的那样,它引入了性能惩罚,因为必须为每个文档单独执行 javascript。如果您不经常使用该查询,那没关系。但是,如果您这样做,我建议添加另一个字段,该字段将作为该字段的聚合,field1
然后field2
基于该字段进行查询。