Mon go агрегированный запрос приводит к меньшему количеству документов с сортировкой - PullRequest
1 голос
/ 28 марта 2020

Я столкнулся со странной проблемой, когда запрашивал одну из наших коллекций и собирал результат в другую коллекцию . Я запрашиваю уникальных пользователей, которые выполнили какое-то действие, и спроецировал количество действий, выполненных для каждого пользователя в запросе агрегации.

var result = db.getCollection('user_actions').aggregate(
[
  {"$match":{"createdAt":{"$gte":1585161000000,"$lt":1585247340000}}},
  {"$group":{"_id":{"accountId":"$user.id"},"count":{"$sum":1}}},
  {"$sort": {"count": -1}},
  {"$project":{"_id":0,"count":"$count","accountId":"$_id.accountId"}}
]
)
db.getCollection('winners').insert(result.toArray())
db.getCollection('winners').find({}).count()

В результате вышеупомянутого запроса вставляется 12643 документов в вновь созданная коллекция.

Я также попытался выполнить запрос с allowDiskUse и значением начального размера пакета курсора . Но статистика коллекции как выходного сигнала конвейера агрегации осталась прежней, и я тоже не получаю никаких исключений .

{
    "ns" : "data.winners",
    "size" : 1121979,
    "count" : 12639,
    "avgObjSize" : 88,
    "storageSize" : 4096,
    "capped" : false,
    "wiredTiger" : {...},
    "nindexes" : 1,
    "totalIndexSize" : 4096,
    "indexSizes" : {
        "_id_" : 4096
    },
    "ok" : 1,
    "operationTime" : Timestamp(1585321431, 41),
    "$gleStats" : {...},
    "lastCommittedOpTime" : Timestamp(1585321431, 41),
    "$configServerState" : {...},
    "$clusterTime" : {...   }
}

Это было скорее настройкой сюжета, теперь, когда я удаляю запрос sort из агрегации, он в результате выдает 26397 документов. Я мог бы выбрать некоторые отдельные учетные записи из этого результата и убедиться, что это правильный результат, который я должен был получить в первую очередь ( отсортировано дополнительно). Я попытался просмотреть MongoDB Limits and Thresholds , но не смог найти связь с наблюдением.

Версия базы данных

db.version()
4.0.0

Подробности оболочки

mongo -version
MongoDB shell version v4.2.1
git version: edf6d45851c0b9ee15548f0f847df141764a317e
allocator: system
modules: none
build environment:
    distarch: x86_64
    target_arch: x86_64

Редактировать : Стоит упомянуть, как обсуждалось с Валижоном в комментариях, используя другой этап в конвейере агрегации для подсчета обработанных документов:

{"$count": "winners"}

приводит к одному и тому же значению 26397 с этапом {"$sort": {"count": -1}} и без него.


Для меня это не похоже на предел памяти сортировки , поскольку выкинул ошибку согласно документации.

...