Mongo / Mongoose - $ redact中的嵌套算术计算

时间:2017-07-15 14:43:20

标签: mongodb mongoose

我发布了一个问题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 来调用调用它的函数。

提前致谢!

1 个答案:

答案 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"
  }
}