根据计算的差异查找

时间:2017-07-15 09:14:13

标签: mongodb mongoose mongodb-query aggregation-framework

我需要根据一些参数查询我的Mongo DB。但是,要获取参数,我首先需要使用find()然后进行一些计算。

这显然效率不高。

让我详细说明:

以下是我要查询的收藏集:

{
  "title": "1",
  "description": "1",
  "aCounter": 100,
  "bCounter": 20,
  "__v": 0
}

我想找到 aCounter - bCounter 超过 50 的帖子。

我有模型,一切都准备就绪,但不知道将什么放入find()参数。

postModel.find({
  //I don't know what to put here
})
.exec(function(err, posts) {
  if(posts){
    //return the data
  }
});

任何输入都会有所帮助。

由于

1 个答案:

答案 0 :(得分:1)

两个选项:

使用$where

postModel.find({ "$where": "(this.aCounter - this.bCounter) > 50" })

或使$redact .aggregate()使用$where实际上更高效:

postModel.aggregate([
  { "$redact": {
    "$cond": { 
      "if": {
        "$gt": [
          { "$subtract": [ "$aCounter", "$bCounter" ] },
          50
        ]
      },
      "then": "$$KEEP",
      "else": "$$PRUNE"
    }
  }}
])

后者更好,因为它使用"原生编码"运算符而不是{{3}}使用的JavaScript评估。

尽可能,两者都应该与常规查询表达式结合使用,因为它们实际上都不能使用索引来加速它自己的结果。