Не удается получить allowDiskUse: True для работы с pymongo
Я бегу в aggregation result exceeds maximum document size (16MB)
ошибка при агрегации mongodb с помощью pymongo.
я смог преодолеть его сначала, используя . Однако в какой-то момент я получил
Exceeded memory limit for $group, but didn't allow external sort. Pass allowDiskUse:true to opt in." error.
хорошо, я буду использовать . Эта опция работает, когда я использую ее в командной строке, но когда я пытался использовать в своем коде python
result = work1.aggregate(pipe, 'allowDiskUse:true')
Я TypeError: aggregate() takes exactly 2 arguments (3 given)
ошибка. (это несмотря на определение, данное в http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.aggregate: совокупный(производство, **kwargs)).
Я попытался использовать runCommand, или, скорее, это эквивалент pymongo:
db.command('aggregate','work1',pipe, {'allowDiskUse':True})
но теперь я вернулся к ошибке " результат агрегации превышает максимальный размер документа (16 МБ)"
в случае, если вам нужно знать
pipe = [{'$project': {'_id': 0, 'summary.trigrams': 1}}, {'$unwind': '$summary'}, {'$unwind': '$summary.trigrams'}, {'$group': {'count': {'$sum': 1}, '_id': '$summary.trigrams'}}, {'$sort': {'count': -1}}, {'$limit': 10000}]
спасибо
1 ответов
Итак, по порядку:
aggregate
- Это метод. Он принимает 2 позиционных аргумента (self
, который неявно передается, иpipeline
) и любое количество ключевое слово аргументы (которые должны быть передан какfoo=bar
- если нет=
знак, это не аргумент сайта). Это означает, что вам нужно позвонитьresult = work1.aggregate(pipe, allowDiskUse=True)
.ваша ошибка о максимальном размере документа присуща Mongo. Mongo никогда не может вернуть документ (или массив их) более 16 мегабайт. Я не могу сказать почему, потому что вы не дали нам ни свои данные, ни свой код, но это, вероятно, означает, что документ, который вы создаете в конечном итоге, слишком велик. Попробуйте уменьшить