是否可以使用mongo find函数通过表达式查找?

时间:2015-07-15 09:28:34

标签: mongodb mongodb-query

说我有这样的数据:

{
  a: 2,
  b: 1
}

我想找到a大于b的所有值。

我显然可以使用聚合管道或使用 $ where 来实现此目的,但是我可以使用普通的旧查找功能吗?感觉应该可以做到这一点,就像在汇总管道中一样:

db.collection.find({
  a: {
    '$gt': '$b'
  }
})

(这不起作用)

这是不支持的,如果没有,这是设计,理念还是遗漏?或者,我只是一个白痴吗?

2 个答案:

答案 0 :(得分:1)

您可以使用documentation here运算符。

db.collection.aggregate(
    [
        { "$redact": {
            "$cond": {
                if: { "$gt": [ "$a", "$b" ] }, 
                then: "$$KEEP", 
                else: "$$PRUNE"
            }
          }
        }
    ]
)

答案 1 :(得分:1)

我认为MongoDB还不支持表达式,以适应 $where 表达式以外的两个或多个字段之间的比较,或者使用与常规查找相同的查询语言的聚合框架。

您可以做的最好的事情是在文档中存储一个非规范化的标记,例如存储布尔isGreater的{​​{1}},然后您可以使用(a - b > 0)

查询
find()

这里有类似的JIRA票据 SERVER-7623 ,这是有计划但未安排的。