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: 0
和 lost: 0
我打赌这很明显,但我就是看不出来!
谢谢
简单比较 team
和 winner
值怎么样?对于赢的情况,如果 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供大家参考。
我正在做几个 $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: 0
和 lost: 0
我打赌这很明显,但我就是看不出来!
谢谢
简单比较 team
和 winner
值怎么样?对于赢的情况,如果 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供大家参考。