В MongoDB, если коллекция удаляется, индексы также удаляются автоматически? - PullRequest
28 голосов
/ 14 декабря 2011

Если я создаю коллекцию в Mongo и после добавления документов в эту коллекцию я использую ensureIndex() для создания индекса, скажем, числового поля в документе в этой коллекции, если я отбрасываю коллекцию, у меня естьпересоздать индекс?

Ответы [ 3 ]

37 голосов
/ 14 декабря 2011

Краткий ответ: да.

Индексы сбрасываются при сборе коллекции. Вам нужно пересоздать индекс.

Вы можете не удалять коллекцию, а удалять все элементы в ней с помощью db.collection_name.remove({}). Это займет больше ресурсов, но оставит ваши индексы. На самом деле это нужно будет удалить все данные индекса. Вот почему более предпочтительно отбросить всю коллекцию и воссоздать индексы после этого.

13 голосов
/ 22 марта 2013

Я только что сделал это для коллекции с 10 индексами и не хотел их создавать вручную. Вы можете выполнить удаление и воссоздать с помощью индексов со следующими тремя строками в оболочке mongo:

var indexes = db.collection.getIndexKeys().splice(1)
db.collection.drop();
indexes.forEach(function(el){ db.collection.ensureIndex(el, {background:true}); })

Это не достаточно умно, чтобы обрабатывать уникальные или разреженные индексы, но я думаю, что это будет довольно легко поддерживать, используя вместо этого вывод getIndexes (). Мне это не нужно, поэтому я этого не делал.

Соединение (1) предназначено только для удаления индекса _id, поскольку он будет создан автоматически.

2 голосов
/ 14 декабря 2011

Удаление коллекции действительно удаляет все индексы, как вы подозреваете, поэтому, когда вы воссоздаете коллекцию (явно или неявно, добавляя новые документы), вам потребуется воссоздать любые индексы, которые вам нужно представить. Индекс по умолчанию для _id создается для вас автоматически.

...