猫鼬:$ sum(如果有条件)

马修斯·巴伦(Matheus Barem)

我有一个查询,其中包含模型中查找和汇总的find Schedule,并计算服务总数和服务总价值之和。但是我需要使用“ status”等于2的条件使这个总和(totalServices的总和)。我可以这样做吗?

我的查询:

 Schedule.find(findTerm)
    .skip(req.body.page * req.body.limit)
    .limit(Number(req.body.limit))
    .select(
      "service.name value scheduleStart scheduleEnd comissionValue status paymentMethod"
    )
    .exec((err, response) => {
      if (err) res.status(500).send(err);

      Schedule.find(findTerm)
        .count()
        .exec((error, count) => {
          if (error)
            res.status(500).send({
              error,
              code: 0,
              message: "Erro."
            });

          Schedule.aggregate([{
              $match: {              
                store: req.body.store,             
              }
            },
            {
              $group: {
                _id: {
                  id: "$store"
                },
                totalValue: {
                  $sum: "$value"
                },
                totalServices: {
                  $sum:  {
                    $cond: [ {
                      $eq: [ "$status", 2 ]
                    }]
                  }
                },
                count: {
                  $sum: 1
                }
              }
            }...

我的查询结果:

...{
            "service": {
                "name": "CABELO + BARBA"
            },
            "comissionValue": 0,
            "paymentMethod": 0,
            "_id": "5bfec336c6f00d2e88f8d765",
            "scheduleStart": "2018-11-28 14:35",
            "scheduleEnd": "2018-11-28 15:45",
            "status": 2,
            "value": 75
        },
        {
            "service": {
                "name": "Barba"
            },
            "comissionValue": 0,
            "paymentMethod": 0,
            "_id": "5bfec3ffc6f00d2e88f8d766",
            "scheduleStart": "2018-11-28 18:30",
            "scheduleEnd": "2018-11-28 18:50",
            "status": 2,
            "value": 20
        }
    ],
    "count": 4299,
    "group": [
        {
            "_id": {
                "id": "5b16cceb56a44e2f6cd0324b"
            },
            "totalValue": 777780048281, //right value
            "totalServices": 945, //wrong value
            "count": 676
        }
    ]
}

如果status等于,我需要将totalServices的总和过滤到仅对象2(我尝试使用$ cond但不起作用)。

阿什

你需要检查的status条件($cond),即如果status等于($eq)到2随后$sumvalue场否则通0

Schedule.aggregate([
  { "$match": { "store": req.body.store }},
  { "$group": {
    "_id": { "id": "$store" },
    "totalValue": { "$sum": "$value" },
    "totalServices": {
      "$sum": { "$cond": [{ "$eq": ["$status", 2] }, 1, 0] }
    },
    "count": { "$sum": 1 }
  }}
])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章