2016-03-26 16 views
0

için aşağıdaki alanları ile bir koleksiyona sahip dolayı:mongoimport E11000 yinelenen anahtar indeksi

name 
type 
color 

Ben de benzersiz bir dizin name_1_type_1 var.

bir veri seti varsayarak:

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

mongoimport I ilk veri kümesi oluşturmak kullanılması.

Şimdi, aşağıdaki 3 hedeflere ulaşmak için koleksiyon güncellemeniz gerekir:

  1. yeni belgeleri eklemek (örn name1 - aşağıda snippet'te type2)
  2. güncelleme mevcut belgelerde color (örn blue -> bazı belgelerde aşağıda name1)
  3. ekleme yeni isteğe bağlı alan shape yılında red

    Yukarıdaki json dosyası üzerinde mongoimport --upsert yürütürken 10
    [ 
        { 
         name: "name1", 
         type: "type1", 
         color: "red", 
         shape: "circle" 
        }, 
        { 
         name: "name1", 
         type: "type2", 
         color: "green", 
         shape: "rectangle" 
        } 
    ] 
    

Ancak, alıyorum:

hata ekleyerek belgeleri: test.col1 endeksi: E11000 anahtar hata koleksiyonu yinelenen

anahtar dup name_1_type_1

Belki mongoimport yanlış kullanıyorum.

Yukarıda bahsi geçen yukarıda belirtilen 3 hedefe ulaşmak için mongoimport'u nasıl kullanabilirim?

cevap

1

--upsertFields seçeneğini kaçırmış görünüyorsunuz. Olmadan mongoimport, _id kastettiğinizi ve özellikle içe aktarılan dosyada bulunmadığını varsayarsa, yeni öğeleri her zaman "eklemeye" çalışır. Bu nedenle yinelenen anahtar hatası.

Yani benzersiz bir anahtar dayandırdıkları alanları belirtirseniz:

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

Ardından aşağıdaki gibi bir sonuç elde etmelidir:

{ 
     "_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" 
} 

Not modern bültenleri --upsert yılında --upsertFields kullandığınızda ima edilir.

N.B. Verileriniz bu şekilde yapılandırılmışsa, --jsonArray'a da gereksinim duyabilirsiniz.

+0

'--upsertFields' sorun oldu! teşekkür ederim. –