Ответ 1
Для MongoDB v3.x,
--mode=upsert
У меня есть БД, которое называется "Проект" и коллекция, которое является "образцом", после чего я вставил один файл JSON с помощью команды mongoimport
.
Теперь я отредактировал тот же JSON файл. Поэтому, если вы хотите импортировать один и тот же файл JSON в коллекцию, я сталкиваюсь с проблемой, так как создается несколько экземпляров, и обновление не происходит.
Есть ли способ обновить или перезаписать данные, уже присутствующие в mongodb, используя команду mongoimport
?
Обратите внимание, что я также попытался использовать флаг --mode=upsert
:
./mongoimport --db Project --collection sample --mode=upsert --file /home/rule.json
Для MongoDB v3.x,
--mode=upsert
Поведение по умолчанию говорит о пропуске, если оно уже существует поэтому по умолчанию он не будет перезаписывать существующие данные.
Но вы можете обновить его, используя флаг --upsert
.
- drop также может использоваться вместе с командой mongoimport для перезаписывания/обновления существующих данных.
--drop
./mongoimport --db Project --collection sample --drop --file /home/UCSC_rule.json
Я дал это решение, потому что я попытался использовать флаг - upsert, но я не мог видеть никаких изменений в существующих данных, вместо этого был создан новый экземпляр.
Исходя из документа mongo, причина --mode = upsert не работает в вашем случае по умолчанию, mongoimport использует поле _id. Поэтому --drop должен быть правильным ответом.
--mode = upsert:
По умолчанию mongoimport использует поле _id для сопоставления документов в коллекции с документами в файле импорта. Чтобы указать поля, с которыми нужно сопоставлять существующие документы для режимов upsert и merge, используйте --upsertFields.
--drop:
Изменяет процесс импорта, чтобы целевой экземпляр отбрасывал коллекцию перед импортом данных из входных данных.