mongoDB的索引类型
Laiyong Wang Lv6

1. 单字段索引(Single Field Index)

单字段索引用于一个字段的查询。

示例:

1
db.collection.createIndex({ age: 1 });

这将在 age 字段上创建一个升序索引。如果要创建降序索引,可以将 1 替换为 -1

2. 复合索引(Compound Index)

复合索引用于多个字段的查询。

示例:

1
db.collection.createIndex({ age: 1, name: -1 });

这将在 age 字段和 name 字段上创建一个复合索引,age 字段按升序排列,name 字段按降序排列。

3. 多键索引(Multikey Index)

多键索引用于数组字段的查询。MongoDB 会为数组中的每个元素创建一个索引条目。

示例:

1
db.collection.createIndex({ tags: 1 });

假设 tags 字段是一个数组,如 ["mongodb", "database"],MongoDB 会为每个元素创建一个索引条目。

4. 文本索引(Text Index)

文本索引用于文本字段的全文搜索。

示例:

1
db.collection.createIndex({ content: "text" });

这将在 content 字段上创建一个文本索引,允许进行全文搜索。

5. 地理空间索引(Geospatial Index)

地理空间索引用于存储地理空间坐标的查询。

示例:

1
db.collection.createIndex({ location: "2dsphere" });

假设 location 字段存储地理空间数据,MongoDB 会为其创建一个 2dsphere 索引,支持地理空间查询。

6. 哈希索引(Hashed Index)

哈希索引用于等值查询。

示例:

1
db.collection.createIndex({ user_id: "hashed" });

这将在 user_id 字段上创建一个哈希索引,适用于等值查询。

7. 唯一索引(Unique Index)

唯一索引确保索引字段的值在集合中是唯一的。

示例:

1
db.collection.createIndex({ email: 1 }, { unique: true });

这将在 email 字段上创建一个唯一索引,确保每个文档的 email 值是唯一的。

8. 部分索引(Partial Index)

部分索引用于仅索引符合特定条件的文档。

示例:

1
2
3
4
db.collection.createIndex(
{ age: 1 },
{ partialFilterExpression: { status: "active" } }
);

这将在 age 字段上创建一个部分索引,仅索引 status"active" 的文档。

9. 稀疏索引(Sparse Index)

稀疏索引仅索引包含索引字段的文档。

示例:

1
db.collection.createIndex({ age: 1 }, { sparse: true });

这将在 age 字段上创建一个稀疏索引,仅索引包含 age 字段的文档。

索引管理

查看索引

要查看集合中的所有索引,可以使用 getIndexes 方法:

1
db.collection.getIndexes();

删除索引

要删除集合中的索引,可以使用 dropIndex 方法:

1
db.collection.dropIndex("index_name");

要删除集合中的所有索引,可以使用 dropIndexes 方法:

1
db.collection.dropIndexes();
$li-margin-bottom = 0.8rem $post-tool-button-width = 2.5rem .post-tools-container { padding-top var(--component-gap) .post-tools-list { li { margin-bottom $li-margin-bottom &:last-child { margin-bottom 0 } } li.tools-item { position relative box-sizing border-box width $post-tool-button-width height $post-tool-button-width color var(--text-color-3) font-size 1.2rem background var(--background-color-1) border-radius 50% box-shadow 2px 2px 5px var(--shadow-color) cursor pointer &:hover { box-shadow 2px 2px 8px var(--shadow-hover-color) } i { color var(--text-color-3) } &:hover { color var(--background-color-1) background var(--primary-color) i { color var(--background-color-1) !important } } &.toggle-show-toc { display none } &.go-to-comments { .post-comments-count { position absolute top 0 right -1rem display none align-items center justify-content center box-sizing border-box min-width 1.1rem height 1.1rem padding 0 0.2rem color var(--badge-color) font-size 12px background var(--badge-background-color) border-radius 0.4rem +keep-tablet() { display none !important } } } } li.status-item { width $post-tool-button-width height $post-tool-button-width color var(--text-color-3) font-size 1.6rem cursor pointer &.post-lock { cursor default .fa-lock-open { display none color var(--keep-success-color) } &.decrypt { cursor pointer .fa-lock-open { display block } .fa-lock { display none } } } } } }