mongoimport E11000重复键由于指数

问题描述:

我有以下字段集合:mongoimport E11000重复键由于指数

name 
type 
color 

我也有一个唯一索引name_1_type_1

假设的数据集:

[{ 
    name: "name1", 
    type: "type1", 
    color: "blue" 
}, { 
    name: "name2", 
    type: "type1", 
    color: "green" 
}] 

使用mongoimport我创建初始数据集。

现在,我需要,以实现以下3个目标,以更新的集合:

  1. 插入新的文档(例如name1 - type2下面摘录)
  2. 更新现有文档color(如blue - >red下面name1
  3. 追加新的可选字段shape在一些文件

    [ 
        { 
         name: "name1", 
         type: "type1", 
         color: "red", 
         shape: "circle" 
        }, 
        { 
         name: "name1", 
         type: "type2", 
         color: "green", 
         shape: "rectangle" 
        } 
    ] 
    

然而,上述JSON文件执行mongoimport --upsert的时候,我得到:

错误插入的文件:E11000重复键错误收集: test.col1指数:name_1_type_1 DUP键

也许我以错误的方式使用mongoimport

如何使用mongoimport实现上述3个upsert目标?

您似乎错过了--upsertFields选项。没有它mongoimport假设你的意思是_id,特别是如果这不是在被导入的文件中存在,那么它只是试图“插入”新的项目。因此重复的关键错误。

所以,如果你指定已对其基于唯一键的字段:

mongoimport -d database -c collection --upsert --upsertFields name,type input.json 

那么你应该得到像下面这样的结果:

{ 
     "_id" : ObjectId("56f6332a49ec4ea8330063b6"), 
     "name" : "name1", 
     "type" : "type1", 
     "color" : "red", 
     "shape" : "circle" 
} 
{ 
     "_id" : ObjectId("56f6332a49ec4ea8330063b7"), 
     "name" : "name2", 
     "type" : "type1", 
     "color" : "green" 
} 
{ 
     "_id" : ObjectId("56f633d4824b97f80d3714b1"), 
     "name" : "name1", 
     "type" : "type2", 
     "color" : "green", 
     "shape" : "rectangle" 
} 

注意,在现代释放--upsert暗示当您使用--upsertFields

N.B.如果您的数据是这样构建的,那么您可能还需要--jsonArray

+0

'--upsertFields'是问题!谢谢。 –