Причина, по которой вы просите об этом, заключается в том, что вы не знаете, как работает оператор $sample
. Как уже упоминалось в documentation,
Для того, чтобы получить N случайных документы:
Если N больше или равно 5% от общего количества документов в коллекции, $ пробы выполняет сбор сканировать, выполняет сортировку, а затем выбирает верхние N документов. Таким образом, стадия $ sample подчиняется sort memory restrictions.
Если N составляет менее 5% от общего количества документов в коллекции, При использовании WiredTiger Storage Engine в образце $ образец использует случайный курсор над коллекцией для выборки N документов. При использовании MMAPv1 Storage Engine в образце $ sample используется индекс _id для случайного выбора N документов.
Так что я думаю, что число случайных документов, которые вы хотите получить больше, чем на 5%. Вам необходимо установить allowDiskUse
на номер True
.
collection.aggregate(pipeline, allowDiskUse=True)
Спасибо, я попробовал это, но выясняется, что проблема связана с размером кеша файловой системы, который по умолчанию установлен на слишком большое число. – siamii