Java-драйвер Mongo: индексы восстановления после удаления коллекции

У меня есть необходимость удалить все данные из коллекции монго. Удаление коллекции работает быстрее, чем collection.remove(new BasicDBObject()). Но он также удаляет определения индексов. Поэтому я хочу восстановить определения индекса после удаления коллекции.

В общем у меня следующий план:

  1. Получите все определения индексов перед удалением: http://www.mongodb.org/display/DOCS/Java+Tutorial#JavaTutorial-GettingaListofIndexesonaCollection
  2. Воссоздайте определения после удаления: http://www.mongodb.org/display/DOCS/Java+Tutorial#JavaTutorial-CreatingAnIndex

Для меня проблема заключается в точном значении, которое должно быть получено/передано для восстановления индекса. Например. будет следующая корректная работа для всех типов индексов:

List<DBObject> storedDefinitions = coll.getIndexInfo();
coll.drop();
for (DBObject storedDefinition : storedDefinitions) {
  coll.createIndex(storedDefinition.get("key"));
}

Если нет - как лучше всего достичь моих целей?

Спасибо за любую помощь!


person Raman    schedule 11.10.2011    source источник


Ответы (1)


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

person Remon van Vliet    schedule 11.10.2011
comment
Спасибо за Ваш ответ! Но как получить точный набор опций? - person Raman; 17.10.2011
comment
mongodb.org/display/DOCS/Indexes#Indexes-CreationOptions предоставляет набор существующих опций. Но это может быть расширено позже, и я ищу возможность точно определить набор параметров в связанном с индексом DBObject. - person Raman; 17.10.2011
comment
getIndexInfo().get(..).get(sparse), getIndexInfo().get(..).get(unique) и т. д. Для более безопасного подхода к будущим расширениям просто удалите все обязательные поля (ns, v, ключ и т. д.), и у вас остаются все необязательные поля. - person Remon van Vliet; 17.10.2011