[CS] MongoDB Index Day-56


格納されたデータが大きいほど、クエリーの結果を待つ時間が長くなります.インデックスは、クエリの速度が遅いことを解決する方法です.

Index


各オブジェクトの位置が表示されている場所で、そのオブジェクトが言及したページに直接移動できる場合は、それでいいです.
たとえば、「iphone」を探すためにすべてのページを検索するよりも、
MongoDBではIndexも同様の役割を果たしている.
Indexをブラウズしやすい形式で保存する必要があるからです.
ex)people collectionで身長180 cmの人を探して体重順に並べたいとき
db.people.find({"height": 180}).sort("weight": 1).pretty();
上のクエリはpeopleという名前の集合の中で身長180の人を見つけて、体重順に並べます.
height、weightに基づいて複数のインデックスを作成する場合は、すべてのドキュメントをクエリーする必要はありません.
ex)実戦例-2(身長170未満の人を探したい場合)
db.people.find({"height": {$lt: 170}});

createIndex


インデックスを作成するには、createIndex()というメソッドを使用します.
インデックスを適用するフィールドをcreateIndexのパラメータとします.
指定した値が1の場合は昇順、-1の場合は降順となります.
(属性を追加することもできます.)
db.collection.createIndex({<필드명>:1}, {<property>: true})

Unique(ユニーク)をidフィールドに追加できます。1つの値しか存在しないプロパティ。


ex)user idフィールドのインデックスを、重複値のない唯一のフィールドとして作成します.
db.members.createIndex({"user_id": 1}, {unique: true})

Partial


インデックスを特定のDocumentにのみ適用するDocument条件を指定します.
Partialを使用すると、必要な場所でインデックスを使用するだけで効率的にクエリーできます.
そのためには、「部分FilterExpression」オプションを使用します.
foresters Collectionでは、2つのフィールドcuiseとnameを使用して複数のインデックスを作成します.4点以上のDocumentにのみ適用されます.
db.restaurants.createIndex({"cuisine":1, "name":1}, {partialFilterExpression: {rating:{$gt:4}}})

TTL (Time To Live)


DateまたはDateアレイタイプのフィールドにのみ適用されます.
特定時間後にDocument Collectionから削除します.
TTL属性をIndexに追加し、lastModifiedDateとの間隔が3600秒を超えるとDocument Collectionから削除します.
db.eventLog.createIndex({"lastModifiedDate": 1}, {expireAfterSeconds: 3600})

getIndexes, dropIndex


生成されたインデックスをクエリーするときにgetIndexesメソッドを使用します.
削除時にdropIndexを使用します.
ex)クエリ生成インデックスの場合
db.collection.getIndexes()
ex)インデックスを削除する場合
db.collection.dropIndex(name);