我需要根据一些参数查询我的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
}
});
任何输入都会有所帮助。
由于
答案 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评估。
尽可能,两者都应该与常规查询表达式结合使用,因为它们实际上都不能使用索引来加速它自己的结果。