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

yfwxisqw  于 2023-10-21  发布在  Go
关注(0)|答案(7)|浏览(127)

我有数据库的名称是“项目”和集合的名称是“样本”,然后我插入一个JSON文件使用mongoimport命令。
现在我编辑了相同的JSON文件。因此,如果想要将相同的JSON文件导入到集合中,那么我将面临这样的问题:创建多个示例,并且没有更新。
有没有办法使用mongoimport命令更新或覆盖mongodb中已经存在的数据?
请注意,我还尝试使用--mode=upsert标志:

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

stszievb1#

对于MongoDB v3.x,

--mode=upsert
eyh26e7m

eyh26e7m2#

--dropflag也可以与mongoimport命令一起使用沿着来覆盖/更新现有数据。

--drop

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

我给出这个解决方案是因为我尝试使用**--upsert**flag,但我看不到现有数据的任何更改,而是创建了新的示例。

np8igboo

np8igboo3#

默认行为是跳过已经存在的数据,所以默认情况下不会覆盖现有的数据。
但是你可以使用--upsert标志来更新它。

cnjp1d6j

cnjp1d6j4#

根据mongo文档,--mode=upsert在你的情况下不起作用的原因是默认情况下,mongoimport使用_id字段。所以正确答案应该是“掉”
--mode=upsert:
默认情况下,mongoimport使用_id字段来匹配集合中的文档和导入文件中的文档。要指定在upsert和合并模式下匹配现有文档的字段,请使用--upsertFields。
--drop:
修改导入过程,以便目标示例在从输入导入数据之前删除集合。
mongoimport document

dgtucam1

dgtucam15#

--mode upsert将创建一个新的记录,如果_id的不匹配。这些_id由mongodump/mongorestore在不同机器上的数据库中保存
--drop将删除整个集合!
要覆盖一个或多个记录而不删除其他现有记录,请在使用--upsert时确保id匹配

t40tm48m

t40tm48m6#

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

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

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

odopli94

odopli947#

我的版本是1.40.3,现在你终于可以不用CMD了。
更新单元格上的数据,然后单击右下角的UPDATE按钮。
如果你有很多数据,它可能是隐藏的,你可能必须向下滚动才能看到它。

相关问题