我的DB名称为“Project”,集合名称为“sample”,然后我使用mongoimport
命令插入了一个JSON文件。
现在我编辑了相同的JSON文件。因此,如果要将相同的JSON文件导入到Collection,那么我就会遇到问题,例如创建了多个实例并且没有进行更新。
有没有办法使用mongoimport
命令更新或覆盖mongodb中已存在的数据?
请注意,我也尝试使用--mode=upsert
标志:
./mongoimport --db Project --collection sample --mode=upsert --file /home/rule.json
答案 0 :(得分:15)
对于MongoDB v3.x,
--mode=upsert
答案 1 :(得分:4)
默认行为表示如果已存在则跳过 所以默认情况下它不会覆盖现有数据。
但您可以使用--upsert
标记更新它。
答案 2 :(得分:3)
- drop 标志也可以与mongoimport命令一起使用来覆盖/更新现有数据。
--drop
./mongoimport --db Project --collection sample --drop --file /home/UCSC_rule.json
我提供了此解决方案,因为我尝试使用 - upsert 标记,但我看不到现有数据的任何更改,而是创建了新实例。
答案 3 :(得分:1)
根据mongo文档,默认情况下--mode = upsert不起作用的原因是默认情况下,mongoimport使用_id字段。所以--drop应该是正确的答案。
-mode = upsert:
默认情况下,mongoimport使用_id字段来匹配文档中的文档 导入文件中包含文档的集合。指定字段 匹配现有文档以进行更新和合并 模式,请使用--upsertFields。
-放置:
修改导入过程,以便目标实例删除 从输入中导入数据之前进行收集。
答案 4 :(得分:0)
--mode upsert
将创建一个新记录,如果_id不匹配。这些_id通过mongodump / mongorestore在不同机器上的数据库中保留
--drop
将删除整个集合!
要覆盖一个或多个记录而不删除其他现有记录,请在使用--upsert
时确保ID匹配
答案 5 :(得分:0)
使用MongoDb 3.6.8版,以下解决方案对我有效
mongoimport --db <db name> --collection <collection name> --upsert --upsertFields <field name> --file <path to json file> --jsonArray
“字段名”是MongoDb用于比较的键名,而不是默认字段“ _id”。