我发布了一个问题here,已经回答了问题。
现在,我想采用相同的方法来计算类似的比率(与总数相比),并且仅显示类似比率大于40且小于60的记录。
我认为下面的内容应该有效,但事实并非如此:
postModel.aggregate([
{ $redact: {
$cond: {
and: {
$lt: [ {$divide: {$multiply: [$likeCounter, 100]}, $add: [$likeCounter, $dislikeCounter] }, 60],
$gt: [ {$divide: {$multiply: [$likeCounter, 100]}, $add: [$likeCounter, $dislikeCounter] }, 40]
},
then: $$KEEP,
else: $$PRUNE
}
}}
.exec(function(err, posts) {
if (err){
console.log(err);//There is no output for this
} else {
console.log(posts);//There is no output for this
}
})
]);
我很确定问题是 $ redact 位,但我不确定我做错了什么。我没有从错误或帖子获得控制台输出。
我确保通过在那里放置一个 console.log 来调用调用它的函数。
提前致谢!
答案 0 :(得分:1)
您的$cond
表达式格式不正确。
包含遗漏的if
关键字,[]
围绕算术操作数和聚合变量的引号。
尝试用下面的$cond
替换。
{
"$cond": {
"if": {
"$and": [
{
"$lt": [
{
"$divide": [
{
"$multiply": [
"$likeCounter",
100
]
},
{
"$add": [
"$likeCounter",
"$dislikeCounter"
]
}
]
},
60
]
},
{
"$gt": [
{
"$divide": [
{
"$multiply": [
"$likeCounter",
100
]
},
{
"$add": [
"$likeCounter",
"$dislikeCounter"
]
}
]
},
40
]
}
]
},
"then": "$$KEEP",
"else": "$$PRUNE"
}
}