Преобразование ссылок на объект Mongoose для использования Model.collection.create () - PullRequest
0 голосов
/ 17 декабря 2018

Мне нужно периодически делать резервные копии подмножества базы данных mongo из производства и восстанавливать ее в базе данных разработки для диагностики проблем для конкретных клиентов.Полное резервное копирование / восстановление нецелесообразно, учитывая размер базы данных.

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

Мой алгоритм использует Model.insertMany (docs) в асинхронном цикле, вставляя несколько сотен документов за раз в одну коллекцию за раз, однако, когда задействованы сотни тысяч документов, этот процесс неизбежно потребляет всю памятьили время ожидания соединения с базой данных.Процесс и Db mmory максимальны, и я попытался ввести таймауты в алгоритме для объекта GC и экспериментировал с размером пакета (от 1000 за раз до 1 за один раз), но в результате неизменно происходит сбой на очень большом наборе данных,

Если я использую Model.connection.create (docs) вместо Model.insertMany (docs), восстановление завершается надежно, даже с огромным набором данных, но ссылки ObjectID в моей резервной копии импортируются как строки, а не как ObjectIDи результат не может быть запрошен через мангуста.

Я знаю, что массовая вставка - это сложный сценарий, и Mongoose выполняет проверку и т. Д. Для каждого вставленного документа, но для сценария резервного копирования / восстановления проверка не требуется, поскольку целевая база данных всегда является подмножеством src.db, и мне интересно, есть ли метод Model или Schema или другой метод, который я могу использовать для преобразования исходного документа в документ Mongoose?

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

...