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