2017-07-15 82 views
0

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

这显然不是有效的。

让我解释:

这是我收藏我要查询:

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

我想找到帖里aCounter - bCounter超过。

我有模型和一切准备就绪,但不知道要在find()参数中放什么。

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

任何输入都会有所帮助。

感谢

回答

1

两个选项:

使用$where

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

或者实际上具有更好的性能使用$redact.aggregate()

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

后者是更好的真的是因为它使用“那提已经编码“的操作符,而不是使用$where的JavaScript评估。

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

+0

谢谢尼尔!我给他们两个去远方 –

+0

解决方案2为我工作。谢谢。我还有其他一些问题(需要嵌套算术计算来找到比例),但我不想劫持这篇文章。 –

+1

@ShayanKhan所以你[不应该当一个答案解决实际问题](https://meta.stackoverflow.com/q/252113/2313887)。如果您有不同的要求,那么正确的程序要么是1.从给出的答案中学习,以便应用您在问题中未表示的实际需求。 2. [提出新问题](https://stackoverflow.com/questions/ask)如果您不确定如何根据实际需求调整答案。在任何情况下,你都不应该A.改变你的帖子或答案B.提供一个不同于要求的问题的要求的答案。 –