mongoimport忽略_id键(E11000重复键错误索引)

时间:2017-03-26 21:01:34

标签: json mongodb mongoimport

假设我有以下两个JSON,我想将它们导入到同一个集合中,而无需合并或更新现有文档。有没有办法,在导入过程中忽略现有的_id键,最后得到一个包含下面示例中所有6个文档的集合?

旧的_id属性无关紧要。我可以从源文件重命名/删除它们,我只是好奇是否有办法在导入过程中执行此操作。

coll1.json:
{"_id":1,"a":1}
{"_id":2,"a":2}
{"_id":3,"a":3}

coll2.json:
{"_id":1,"a":4}
{"_id":2,"a":5}
{"_id":3,"a":6}

如果我只是导入它们,mongoimport --db imp --collection imp --file coll2.json我收到E11000重复键错误。

1 个答案:

答案 0 :(得分:1)

如果要使用以下命令覆盖文档导入

mongoimport --db imp --collection imp  --mode upsert --file coll2.json

在mongodb中 _id 字段默认是唯一的,所以你不能像你的情况一样拥有相同值的_id

coll1.json:
{"_id":1,"a":1} // _id is same as document below
{"_id":2,"a":2}
{"_id":3,"a":3}

coll2.json:
{"_id":1,"a":4} // {"_id":1,"a":1}
{"_id":2,"a":5}
{"_id":3,"a":6}

在这种情况下,您可以做的是将密钥名称从_id更改为id,这样您就可以拥有多个具有相同id值的文档。

coll1.json:
    {"idField":1,"a":1} 
    {"idField":2,"a":2}
    {"idField":3,"a":3}

    coll2.json:
    {"idField":1,"a":4} 
    {"idField":2,"a":5}
    {"idField":3,"a":6}