通过比较字段值找到mongodb

时间:2011-06-18 23:01:46

标签: mongodb

是否可以在mongodb中表达以下SQL查询:

SELECT * FROM table AS t WHERE t.field1 > t.filed2;

修改 总结一下:。

  1. 使用存储“field1-field2”的第三个字段几乎是完美的,但需要一些额外的维护。
  2. $将在JavaScript中加载和评估,不会使用任何索引。对大数据没有好处。
  3. map / reduce有同样的问题,即使我们只需要一个
  4. ,也会通过所有记录

3 个答案:

答案 0 :(得分:17)

您可以使用$where执行此操作:

db.coll.find( { $where: "this.field1 > this.field2" } );

<强>可是:

  

Javascript的执行速度比   原生运营商,但它非常灵活

如果使用@yi_H建议的方式,性能是一个更好的问题。

答案 1 :(得分:15)

您可以将文档field1 - field2存储为field3,然后搜索{ field3: { $gt: 0 } }

也可以通过mapreduce获得匹配的文档。

答案 2 :(得分:3)

您可以使用$ where。请注意,它会相当慢(必须在每条记录上执行Javascript代码),所以如果可以,请与索引查询结合使用。

db.T.find( { $where: function() { return this.Grade1 > this.Grade2 } } );

或更紧凑:

db.T.find( { $where : "this.Grade1 > this.Grade2" } );