2016-03-26 41 views
0

我有以下字段集合: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目標?

回答

1

您似乎錯過了--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'是問題!謝謝。 –

相關問題