スキーマに変更があった場合は、コレクションを削除して再作成する必要はありません。
詳細:
スパースインデックスは唯一のインデックスフィールドはNULL値が含まれている場合でも、インデックスフィールドを持つ文書のためのエントリを含みます。索引は、索引付きフィールドが欠落している文書をスキップします。索引は、コレクションのすべての文書を含んでいないため、「疎」です。対照的に、非疎インデックスはコレクション内のすべてのドキュメントを含み、インデックス付きフィールドを含まないドキュメントにはnull値を格納します。
スパースインデックスと不完全な結果
まばらなインデックスがクエリやソート操作のために設定され、不完全な結果につながる場合、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