Итак, мой вопрос: как я могу эффективно добавить данные из коллекции X в коллекцию Y?
Серверные инструменты mongodump и mongorestore можно использовать. Вы можете экспортировать данные исходной коллекции в файлы дампа BSON и импортировать в целевую коллекцию. Эти процессы выполняются очень быстро, поскольку данные в базе данных уже представлены в формате BSON.
Данные можно экспортировать из незащищенной коллекции в защищенную коллекцию с помощью этих инструментов. В этом случае требуется, чтобы исходная коллекция имела поле шард-ключа (или поля) со значениями. Обратите внимание, что индексы из исходной коллекции также экспортируются и импортируются (с использованием этих инструментов).
Вот пример рассматриваемого сценария:
mongodump --db=srcedb --collection=srcecoll --out="C:\mongo\dumps"
Это создает каталог дампа с именем базы данных. В нем будет файл "srcecoll.bson", и он будет использоваться для импорта.
mongorestore --port 26xxxx --db=trgtdb --collection=trgtcoll --dir="C:\mongo\dumps\srcecoll.bson"
Хост / порт подключается к mongos
сегментированного кластера. Обратите внимание, что имя файла bson должно быть указано в опции --dir
.
При импорте данные и индексы добавляются в существующую защищенную коллекцию. Процесс только вставляет данные; существующие документы не могут быть обновлены. Если значение _id
из исходной коллекции уже существует в целевой коллекции, процесс не будет перезаписывать документы (и эти документы не будут импортированы, и это не является ошибкой).
Для mongorestore
есть несколько полезных опций, например: --noIndexRestore
и --dryRun
.