2016-06-18 3 views
3

У меня есть 1 миллион документов в mongodb. Я хочу найти и удалить те же поля. Можете ли вы дать мне способ или идею?Как найти и отменить такое же значение поля в mongodb

Мои документы, как это:

{ 
     "regions" : [ 
      {"id" : "1", "name" : "World"}, 
      {"id" : "10370","name" : "South America"}, 
      {"id" : "1426","name" : "Suriname"} 
     ] 
    } 
    { 
     "regions" : [ 
      {"id" : "1", "name" : "World"}, 
      {"id" : "10370","name" : "South America"}, 
      {"id" : "1426","name" : "Suriname"} 
     ] 
    } 
    { 
     "regions" : [ 
      {"id" : "1","name" : "World"}, 
      {"id" : "1734","name" : "USA"}, 
      {"id" : "1136","name" : "Pennsylvania"}, 
      {"id" : "16962","name" : "Greater Philadelphia area"}, 
     ] 
    } 
    { 
     "regions" : [ 
      {"id" : "1","name" : "World"}, 
      {"id" : "1734","name" : "USA"}, 
      {"id" : "1136","name" : "Pennsylvania"}, 
      {"id" : "16962","name" : "Greater Philadelphia area"}, 
     ] 
    } 
    { 
    "regions" : [ 
     {"id" : "1","name" : "World"}, 
     {"id" : "34964","name" : "Oceania"}, 
     {"id" : "15","name" : "Australia"}, 
     {"id" : "470","name" : "Western Australia"}, 
     {"id" : "36282","name" : "Perth"}, 
     ] 
    } 

Как мне изменить так:

{ 
     "regions" : [ 
      {"id" : "1", "name" : "World"}, 
      {"id" : "10370","name" : "South America"}, 
      {"id" : "1426","name" : "Suriname"} 
     ] 
    } 
    { 
     "regions" : [ 
      {"id" : "1","name" : "World"}, 
      {"id" : "1734","name" : "USA"}, 
      {"id" : "1136","name" : "Pennsylvania"}, 
      {"id" : "16962","name" : "Greater Philadelphia area"}, 
     ] 
    } 
    { 
"regions" : [ 
    {"id" : "1","name" : "World"}, 
    {"id" : "34964","name" : "Oceania"}, 
    {"id" : "15","name" : "Australia"}, 
    {"id" : "470","name" : "Western Australia"}, 
    {"id" : "36282","name" : "Perth"}, 
    ] 
    } 

Спасибо за ваш ответ и интерес заранее.

UPDATE: Я пытаюсь этот код:

db.collection.aggregate(
{"$group":{"_id": {"id": "$regions.id","name": "$regions.name"},}}, 
{"$group":{"_id":ObjectId(),"regions": { "$push": {"id": "$_id.id","name": $_id.name"}}}}, 
{"$unwind": "$regions"}, 
{"$out": "newcollection"} 
) 

Это дает эту ошибку: "ERRMSG": "вставить за $ из не удалось: {ConnectionID: 111, эээ: \" E11000 дублируют ключи ошибки: индекс collection.tmp.agg_out.12: идентификатора DUP ключа: {: ObjectId ('5767f378ff8f5e9302d95bc8')} \ "код: 11000, п: 0, хорошо: 1,0}",

Как я могу дать уникальный ключ?

+0

Непонятно, что вы хотите сделать здесь. Вы хотите удалить дубликаты из коллекции? – styvane

+0

Да, я хочу удалить дублирующее поле. – tabarly

ответ

0

Использование агрегации. Если вы группируете элементы массива, вы можете избавиться от дублированной области. что-то вроде этого должно помочь?

db.regs.aggregate([{$group:{"_id":{id:"$regions.id",name:"$regions.name"}}}]).pretty() 
+0

Да, это хорошо работает, но все поля под '_id'. Когда я изменил '_id' на' области', он дает ошибку. Большое спасибо. – tabarly

Смежные вопросы