19

我有名称为“项目”的数据库和名称为“样本”的集合,然后我使用mongoimport命令插入了一个 JSON 文件。

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

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

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

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

6 回答 6

28

对于 MongoDB v3.x,

--mode=upsert
于 2015-04-21T15:13:25.050 回答
11

--drop 标志也可以与 mongoimport 命令一起使用来覆盖/更新现有数据。

--drop


./mongoimport --db Project --collection sample --drop --file   /home/UCSC_rule.json

我给出了这个解决方案,因为我尝试使用--upsert标志,但我看不到现有数据的任何变化,而是创建了新实例。

于 2018-02-14T06:32:22.827 回答
6

默认行为表示如果已经存在则跳过,因此默认情况下它不会覆盖现有数据。

但是您可以使用--upsert标志更新它。

于 2015-04-21T14:49:51.910 回答
2

根据 mongo 文档,在您的情况下 --mode=upsert 不起作用的原因是默认情况下, mongoimport 使用 _id 字段。所以 --drop 应该是正确的答案。

--mode=upsert:

默认情况下,mongoimport 使用 _id 字段将集合中的文档与导入文件中的文档进行匹配。要指定匹配 upsert 和合并模式的现有文档的字段,请使用 --upsertFields。

- 降低:

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

mongo导入文件

于 2019-07-02T08:28:10.537 回答
1

--mode upsert 如果 _id 不匹配,将创建一个新记录。这些 _id 由 mongodump/mongorestore 保存在不同机器上的数据库中

--drop将删除整个收藏!

要覆盖一条或多条记录而不删除其他现有记录,请确保 id 在使用时匹配--upsert

于 2020-07-29T02:05:28.950 回答
0

使用 MongoDb 3.6.8 版,以下解决方案对我有用

mongoimport --db <db name> --collection <collection name> --upsert --upsertFields <field name>  --file <path to json file> --jsonArray

其中“字段名称”是 MongoDb 用来比较的键名,而不是默认字段“_id”。

于 2020-08-26T14:33:24.050 回答