MongoDB 每日 won/lost 游戏的总和,$cond 始终为 false

MongoDB aggregate for daily won/lost games, $cond is always false

我正在做几个 $match$unwind,最后得到一组文档,如下所示:

{
_id:249776348,
StartGameTime:1615789789,
team:0,
winner:0
}

所以我将 _id 字段转换为日期(工作正常),然后我尝试每天 won/lost 计数。数据应该这样读:team是玩家所在的队伍,winner是获胜的队伍,所以{ team: 0, winner: 0 }{ team: 1, winner: 1 }表示玩家获胜。

这就是我得到的,$group 在 MongoDB 指南针中完成的 UI:

{
  _id: {$dateToString: { format: "%Y-%m-%d", date: {$add: [ISODate('1970-01-01T00:00:00Z'),  {$multiply: [1000,"$StartGameTime"]  }]}}},
  won: {
    $sum: {
        $cond: [{$or: [{$and: [{$eq: ["team", 1]},{$eq: ["winner", 1]}]},{$and: [{$eq: ["team", 0]},{$eq: ["winner", 0]}]}]}, 1, 0]
    }
  },
  lost: {
    $sum: {
        $cond: [{$or: [{$and: [{$eq: ["team", 1]},{$eq: ["winner", 0]}]},{$and: [{$eq: ["team", 1]},{$eq: ["winner", 0]}]}]}, 1, 0]
    }
  }
}

不幸的是,它总是给我 won: 0lost: 0

我打赌这很明显,但我就是看不出来!

谢谢

简单比较 teamwinner 值怎么样?对于赢的情况,如果 team == winner,则计数 + 1,否则计数 + 0。 反之亦然,但条件变为 team != winner

db.collection.aggregate([
  {
    $group: {
      _id: {
        $dateToString: {
          format: "%Y-%m-%d",
          date: {
            $add: [
              ISODate("1970-01-01T00:00:00Z"),
              {
                $multiply: [
                  1000,
                  "$StartGameTime"
                ]
              }
            ]
          }
        }
      },
      won: {
        $sum: {
          "$cond": {
            "if": {
              $eq: [
                "$team",
                "$winner"
              ]
            },
            "then": 1,
            "else": 0
          }
        }
      },
      lost: {
        $sum: {
          "$cond": {
            "if": {
              $ne: [
                "$team",
                "$winner"
              ]
            },
            "then": 1,
            "else": 0
          }
        }
      }
    }
  }
])

这里是Mongo playground供大家参考。