Mongoimport json文件更新或覆盖..?

时间:2015-04-21 14:39:28

标签: json mongodb mongoimport

我的DB名称为“Project”,集合名称为“sample”,然后我使用mongoimport命令插入了一个JSON文件。

现在我编辑了相同的JSON文件。因此,如果要将相同的JSON文件导入到Collection,那么我就会遇到问题,例如创建了多个实例并且没有进行更新。

有没有办法使用mongoimport命令更新或覆盖mongodb中已存在的数据?

请注意,我也尝试使用--mode=upsert标志:

./mongoimport --db Project --collection sample --mode=upsert --file   /home/rule.json

6 个答案:

答案 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。

-放置:

  

修改导入过程,以便目标实例删除   从输入中导入数据之前进行收集。

mongoimport document

答案 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”。