Mongoid大于两个字段的总和

时间:2012-08-16 07:01:38

标签: mongodb mongoid

嗨我正在使用mongoid(mongodb)来超过标准:

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

但是我想知道是否有可能做出两个字段之和大于某个数字的标准。也许这样的事情(但似乎不起作用):

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

也许需要一些嵌入式JavaScript?谢谢!

2 个答案:

答案 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。如果您不经常使用该查询,则可以。但是,如果你这样做,我会建议添加另一个字段,该字段将是field1field2的聚合,然后将查询基于该字段。