2015-08-12 1 views
0

у меня есть 9 миллионов документов и каждый документ 119 полехMongoDB дублирует удалить в больших полях размера (119 полей)

{ "_id" : 0,"field_1" : "value" , .....,"field_118" : "value" } 
... 
... 
... 
{ "_id" : 8999999,"field_1" : "value" , .....,"field_118" : "value" } 

Я попытался

db.collection.ensureIndex({"field_1":1,"field_2":1,....,"field_118":1}, {unique : true, dropDups : true}) 

я получил сообщение об ошибке

"errmsg" : "namespace name generated from index name \"....(fields)..\" is too long (127 byte max)", "code" : 67 

как решить?

+1

Опция dropDups является устаревшей с MongoDB 2.6 ... Какой MongoDB вы используете ? – ZeMoon

+0

Версия mongoDB 2.6.10 – mohamedzajith

+0

Параметр dropDups не будет работать. Вам нужно будет вручную удалить повторяющиеся поля или использовать скрипт. – ZeMoon

ответ

1

В сообщении об ошибке указано, что автоматически сгенерированное имя вашего индекса превысило длину имени индекса.

От documentation:

Индекс Название Длина Полностью квалифицированные имена индексов, который включает в себя пространство имен и точечные разделители (то есть .. $), не может быть длиннее 128 символов.

По умолчанию это конкатенация имен полей и типа индекса . Вы можете явно указать метод createIndex(), чтобы убедиться, что полное имя индекса не превышает предел.

Таким образом, указать свое имя индекса для индекса в ensureIndex или CreateIndex вариантов параметров:

{unique : true, name: myAwesomeIndex} 
+0

Как уже говорилось, опция «dropDups» устарела в версии 2.6.0 и с тех пор была удалена. –

+0

@BlakesSeven Спасибо, удалены из моего примера. –

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