我需要做一个类似于SQL
的简单mongo查询Select * from insights where category = 1 and param_count > param_mean + 1
答案 0 :(得分:1)
理想情况下,您可以使用$redact
作为聚合表达式,并使用初始$match
至少可能使用非计算表达式的索引:
db.collection.aggregate([
{ "$match": { "category": 1 } },
{ "$redact": {
"$cond": {
"if": { "$gt": [ "$param_count", { "$add": [ "$param_mean", 1 ] } ] },
"then": "$$KEEP",
"else": "$$PRUNE"
}
}}
])
如果您的MongoDB"服务器"如果没有$redact
运算符,版本小于2.6,那么您可以使用$where
将JavaScript表达式计算为布尔值以返回结果:
db.collection.find({
"category": 1,
"$where": "this.param_count > this.param_mean + 1"
})
虽然语法较短,但由于需要评估JavaScript表达式,因此需要相当多的处理时间。
如果可能,那么您应该使用$redact
,或者完全避免计算并将计算出的评估存储在文档中。最后一句话适用于"所有"数据库真的。