Mongodb Atlas — длина конвейера более 50 не поддерживается

#mongodb #mongoose #mongodb-atlas

#mongodb #mongoose #mongodb-atlas

Вопрос:

Когда я использую mongoose для mongodb с сервером atlas mongo, выдается сообщение об ошибке, что длина конвейера mongo больше 50 не поддерживается. Я искал это по всему Интернету. не могу найти решение. Есть ли обходной путь для этого?

Ответ №1:

Это происходит потому, что вы использовали слишком много конвейеров в одной агрегации. Если вы хотите использовать более 50 этапов конвейера, вы можете использовать $facet . Следующий рабочий процесс может помочь:

  1. Разделите свои конвейеры на несколько блоков (количество этапов конвейера в каждом блоке не должно превышать 50).
  2. После запуска фасета вы можете использовать $unwind, чтобы разделить результат на отдельные документы, как обычно (возможно, вам потребуется реструктурировать данные, чтобы восстановить прежний формат, используя $project).
  3. После этого вы можете запустить другой аспект, если хотите.

В этом случае, если вы планируете запустить 150 этапов в одной агрегации, вы разделяете их на 4-5 блоков, убедитесь, что каждый блок должен использовать одну и ту же область видимости, чтобы избежать появления «отсутствующей» или «неопределенной переменной», вы можете использовать $ unwind для восстановления формата документа для запуска следующего блока.

Убедитесь, что каждый выходной документ не должен превышать 16 МБ, поэтому я рекомендую использовать $unwind after $facet (он может превышать 16 МБ на этапах). Причина в том, что $ facet выведет все в 1 документ с массивом документов внутри (если вы хотите показать все документы), поэтому $ unwind разделит эти «внутренние» документы на отдельные документы.

Одно замечание по этому поводу заключается в том, что вы можете попробовать ограничить имя поля, чтобы BufBuilder не превышал максимальный размер, который составляет 64 МБ. Попробуйте использовать $project вместо $addFields, поскольку это увеличит буфер между каждым этапом. Еще один из них заключается в том, что вам не следует использовать этапы конвейера, объем которых превышает 100 МБ оперативной памяти, если вы используете MongoDB Atlas < M10.

Возможно, было бы лучше, если бы вы предоставили псевдокод для возникшей у вас проблемы, но я думаю, что это исправило бы ее.