我正在做幾個$match's 和$unwind's 并最終得到一組檔案,如下所示:
{
_id:249776348,
StartGameTime:1615789789,
team:0,
winner:0
}
因此,我將_id欄位轉換為日期(效果很好),然后嘗試每天計算輸贏。資料應該是這樣讀取的:team 是玩家所在的團隊,winner 是獲勝的團隊,所以{ team: 0, winner: 0 }和{ team: 1, winner: 1 }表示玩家獲勝。
這就是我得到的,$group在 MongoDB Compass 的 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
我打賭這很明顯,但我就是看不出來!
謝謝
uj5u.com熱心網友回復:
簡單地比較team和winner值怎么樣?對于贏的情況,如果team== winner,則 count 1,否則 count 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游樂場供您參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/462445.html
上一篇:在某些條件之前和之后匹配元素
