Команда mongorestore заменяет существующие записи?
Есть ли способ, чтобы mongorestore заменил записи, существующие в базе данных, вместо того, чтобы пропускать его, что является поведением по умолчанию?
В настоящее время я использую самую последнюю версию mongodb версии 2.4.x.
Ответы
Ответ 1
Нет. Из магазина
Если вы восстановите существующую базу данных, mongorestore будет только вставлять в существующую базу данных и не будет выполнять какие-либо обновления. Если существующие документы имеют одно и то же поле значения _id в целевой базе данных и коллекции, mongorestore не будет перезаписывать эти документы.
Если вы хотите полностью перезаписать базу данных или коллекцию в базе данных с помощью mongorestore, удалите базу данных или коллекцию (проверьте параметр --drop, как указано в ответе vikas). Если вы хотите заменить определенные документы или объединить дубликаты документов, то вам нужно написать собственный сценарий, чтобы выполнить восстановление и самостоятельно реализовать более сложную логику.
Ответ 2
Вы можете использовать параметр --drop
mongorestore
:
Перед восстановлением коллекций из сохраненной резервной копии удаляет коллекции из целевой базы данных. --drop не удаляет коллекции, которых нет в резервной копии.
Ответ 3
Если у вас есть небольшая коллекция, вы всегда можете:
- mongodump ваша целевая коллекция где-то еще
- удалить целевую коллекцию
- mongorestore исходный файл дампа
- mongorestore файл дампа, который вы сделали на шаге 1
Это переключает приоритет на файл дампа, а не на _ids в БД.
Ответ 4
mongorestore --drop
Перед восстановлением коллекций из сохраненной резервной копии удаляет коллекции из целевой базы данных. --drop не удаляет коллекции, которых нет в резервной копии.
Монго официальная документация
Ответ 5
Я решил это с помощью
- восстановить коллекцию и записать вывод в файл (ошибки)
mongorestore --db database -c collection ~/path_to_bson > output.txt 2>&1
- отфильтровать строки, содержащие
- E11000 duplicate key error collection ...ObjectId(...)
- затем с помощью инструмента мультиредактирования (в моем случае возвышенного) преобразовать эти строки в
db.collection.remove({_id: ObjectId(...)})
- восстановить базу данных снова.