2017-02-06 5 views
1

У меня есть следующий индекс в моих базах данных (да, у меня их пара).Как отказаться от уникального индекса?

{ 
    "v" : 1, 
    "key" : { 
     "someUniqueField" : 1 
    }, 
    "name" : "someUniqueField_1", 
    "ns" : "MyDB.Collection" 
} 

Но на самом деле, я хотел иметь уникальный индекс. Я изменил инструкцию создания индекса для более новых баз данных. Но теперь у меня разные версии этого индекса в разных базах данных.

Теперь я хочу удалить, таким образом, индексы с уникальным: false (или без уникального поля, отображаемого на выходе getIndexes()).

Эти команды будут отбрасывать индекс независимо от уникального флага.

db.collection.dropIndex("someUniqueField_1"); // or 
db.collection.dropIndex({"someUniqueField": 1}); 

Есть ли что-то вроде:

db.collection.dropIndex({"someUniqueField": 1}, {unique: false}); 

Я знаю, что я мог бы бросить все эти показатели и создать новый, или я мог проверить его вручную, если неправильный индекс существует.

Но это было бы также полезно для учебных целей, если это возможно.

+0

Btw: имя индекса одинаково для уникальных индексов и для уникальных индексов. – Sammy

+0

вы можете сгенерировать список с помощью 'db.collection.indexes.find ({" unique ": false});' –

+0

Эта команда не возвращает никакого результата 'db.collection.indexes.find ({})'. Даже с фильтрующей частью или без нее. Но когда я запускаю 'db.collection.getIndexes()', я нашел индексы, но их невозможно отфильтровать в команде db. Кажется, что я должен сделать это вручную. – Sammy

ответ

1

Это должно дать вам сценарий?

db.a.getIndexes().forEach(function(k) { 
    if (k.key.unique != 1) { 
    print("db.a.dropIndex(\"k.name\");"); 
    } 
}); 
+0

Благодарим вас за сценарий. Кажется, что я должен использовать скрипт, а не только одну команду. Но он работает. – Sammy

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