Подтвердить что ты не робот

В MongoDB, если коллекция удалена, индексы также автоматически упали?

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Я только что сделал это в коллекции с 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, так как он будет создан автоматически.

Ответ 3

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