说我有这样的数据:
{
a: 2,
b: 1
}
我想找到a大于b的所有值。
我显然可以使用聚合管道或使用 $ where 来实现此目的,但是我可以使用普通的旧查找功能吗?感觉应该可以做到这一点,就像在汇总管道中一样:
db.collection.find({
a: {
'$gt': '$b'
}
})
(这不起作用)
这是不支持的,如果没有,这是设计,理念还是遗漏?或者,我只是一个白痴吗?
答案 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 ,这是有计划但未安排的。