Нет необходимости бросать коллекцию и воссоздавать ее при изменении схемы.
Дополнительная информация:
разреженные индексы содержат только записи для документов, имеющих индексированную поле, даже если поле индекса содержит нулевое значение. Индекс пропускает любой документ, в котором отсутствует проиндексированное поле. Индекс «разрежен», потому что он не включает все документы коллекции. Напротив, не разреженные индексы содержат все документы в коллекции, сохраняя нулевые значения для тех документов, которые не содержат проиндексированного поля.
разреженный индекс и Неполные результаты
Если разреженный индекс приведет к неполному результирующего набора для запросов и операций сортировки, MongoDB не будет использовать этот индекс, если подсказка() явно указывает индекс.
Наличие разреженного индекса не мешает нам вставлять записи с разреженным регистром или без него, этого достаточно для обработки изменений схемы.
Пожалуйста см коллекции ниже
Collection marks
{_id:1, sub1: 67, sub2: 78, sub3: 56, total: 201}
{_id:2, sub1: 60, sub2: 70, sub3: 50, total: 180}
{_id:3, sub1: 80, sub2: 70, sub3: 50}
Create sparse index
db.marks.createIndex({ total: 1 } , { sparse: true, unique: true })
db.marks.find().sort({ total: -1 })
This query will return all the 3 records, we have applied sort on the sparse indexed field, but MongoDB will not select the sparse index to fulfill the query in order to return complete results.
db.marks.find().sort({ total: -1 }).hint({ total: 1 }), this query will return only 2 records, those who are having the total, so to use the sparse index, explicitly specify the index with hint()
Ссылки
https://docs.mongodb.com/manual/core/index-sparse/
https://docs.mongodb.com/manual/core/index-sparse/#sparse-index-incomplete-results
Надеется, что это помогает!
Что вы имеете в виду, вам нужно отбросить коллекцию, когда добавьте уникальный индекс или установите разреженный? Это 100% ложно. – sergiuz
Можете ли вы предоставить код, который вы используете для применения этого индекса. Вам, безусловно, не нужно бросать свою коллекцию, чтобы применить индекс – pieperu
. Я не думаю, что вам нужно удалить всю коллекцию для этого, если ваше индексное поле присутствует в новом документе. можете ли вы поделиться новым и старым документом? – rushUp