Это одна из ~ 10 миллионов строк в моей базе данных:
{
"_id" : ObjectId("58f569159f809c49ffc5cdbb"),
"date" : ISODate("2017-03-21T09:10:07.686Z"),
"p1" : {
"_id" : 1765906,
"deck" : [
33,
25,
59,
38,
62,
3,
33,
57
],
"crowns" : 3
},
"p2" : {
"_id" : 2520156,
"deck" : [
25,
69,
86,
8,
44,
61,
69,
50
],
"crowns" : 2
}
}
Журнал игрового боя. Колода представляет собой массив, состоящий из 8 разных карт. Я пытаюсь найти карту, у которой больше всего выигрышей. Победителя можно определить путем сравнения корон (мне удалось отобрать все документы, в которых выиграл игрок 1).
Чего я пытаюсь достичь:
К сожалению, мне не удалось выполнить групповой запрос, который вернул бы то, что я ищу (карта с наибольшим количеством выигрышей).
Я также пытаюсь найти наиболее удачную колоду (количества выигрышей достаточно - порядок карт, указанный в этом массиве, следует игнорировать).
То, что я пробовал, но через некоторое время вернул пустую ошибку:
db.battle_logs.aggregate([
{
$addFields: {
"player1won": { "$cmp": [ "$p1.crowns", "$p2.crowns" ] }
}
},
{ $match: { "player1won": 1 }},
{
$group:
{
_id: "$p1.deck",
count: { $sum: 1 }
}
}
], {
allowDiskUse:true,
cursor:{}
})
Я ожидал, что все комбинации колод будут сгруппированы по количеству побед (учитываются только победы игрока1)