Пн go агрегация не анализирует все документы - PullRequest
1 голос
/ 15 февраля 2020

Я пытаюсь получить некоторую статистику, используя платформу агрегации 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 ГБ ОЗУ), но это действительно не имело никакого значения.

Может кто-нибудь подтвердить, что приведенные выше запросы могут делать то, что я хотите их? Любая помощь могла бы быть полезна! Спасибо за ваше время!

...