通过比较字段值找到mongodb

Bla*_*ago 11 mongodb

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

SELECT * FROM table AS t WHERE t.field1 > t.filed2;
Run Code Online (Sandbox Code Playgroud)

编辑: 总结:

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

And*_*ich 17

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

db.coll.find( { $where: "this.field1 > this.field2" } );
Run Code Online (Sandbox Code Playgroud)

但:

Javascript执行速度比本机运算符慢,但它非常灵活

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

  • 不,这不对.这就是为什么我们不再进行装配编程的原因. (4认同)
  • @Sentinel:你在投票之前读完了我的答案????? 我说javascript工作缓慢,更好地创建额外的字段,因为@yi_H建议.但无论如何,运营商存在的$我绝对相信它可以在性能不发布的某些情况下使用. (3认同)
  • 仅当您拥有小集合或使用其他条件(使用索引并返回集合的小子集)预先过滤集合时,才使用此选项.Mongo不知道如何加速此查询并执行全表扫描. (2认同)

Kar*_*ath 15

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

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

  • 我应该提到你可以存储布尔值,这更好地表现性能. (7认同)