Я пытаюсь получить некоторую статистику, используя платформу агрегации Mon go, но мои запросы, похоже, не работают правильно. Итак, у меня есть коллекция документов, каждый документ имеет следующую структуру:
{
"_id" : ObjectId("5e46af306d0f5d63d4de6d0f"),
"homeEmperor" : {
"name" : "Home",
"units" : {
"Mage" : 15,
"Warrior" : 15,
"Swordmaster" : 15,
"Rogue" : 15,
"Warlock" : 15
}
},
"awayEmperor" : {
"name" : "Away",
"units" : {
"Druid" : 15,
"Ranger" : 15,
"Priest" : 15,
"Monk" : 15,
"Dragon" : 15
}
},
"dateCreated" : ISODate("2020-02-06T00:00:00.000Z"),
"winner" : "away",
"battleType" : "mutual",
"turns" : 45,
"_class" : "com.deathstar.Datahouse.domain.mongo.HistoricMongoRecord"
}
Итак, в данный момент я использую этот запрос, чтобы получить количество выигрышей, которое у каждого юнита
db.getCollection('WarHistory').aggregate([
{ $match: { battleType: "mutual" } },
{ $project: {"winners": {$cond: { if: { $eq: [ "$winner", "home" ] }, then: "$homeEmperor.units", else: "$awayEmperor.units"} }} },
{ $project: {"winnerUnits": { $objectToArray: "$winners" }} },
{ $group: { _id: {unitType: "$winnerUnits.k"}} },
{ $unwind: "$_id.unitType" },
{ $group: { _id: {unitType: "$_id.unitType"}, count:{$sum:1} }},
{ $sort : { count : -1 }}
])
и этот запрос, чтобы получить участие каждого подразделения
db.getCollection('WarHistory').aggregate([
{ $match: { battleType: "mutual" } },
{ $project: { "participants": { $mergeObjects: [ "$homeEmperor.units", "$awayEmperor.units" ] } } },
{ $project: {"participantUnits": { $objectToArray: "$participants" }} },
{ $group: { _id: {unitType: "$participantUnits.k"}} },
{ $unwind: "$_id.unitType" },
{ $group: { _id: {unitType: "$_id.unitType"}, count:{$sum:1} }},
{ $sort : { count : -1 }}
])
Вывод обоих запросов, как показано ниже, как я хочу:
{
"_id" : {
"unitType" : "Pirate"
},
"count" : 1331.0
}
После этого Я делю их и так далее. У меня также есть служба Java, которая создает эти документы.
Проблема заключается в том, что, хотя сначала запросы, кажется, работают нормально, после некоторого момента они перестают считать все документы, поэтому я вижу, счетчик «Количество» в Коллекции увеличивается, но результаты запроса остаются такими же.
Я проверил, и документы по-прежнему имеют ту же структуру на этом пути.
Я также попробовал параметр «allowDiskUse: true» на случай, если проблема заключалась в объеме памяти (у меня 16 ГБ ОЗУ), но это действительно не имело никакого значения.
Может кто-нибудь подтвердить, что приведенные выше запросы могут делать то, что я хотите их? Любая помощь могла бы быть полезна! Спасибо за ваше время!