Mongodb索引的创建与命名

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第86篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关注威赞。谢谢。

MongoDB支持用户添加索引,来提高针对某些字段重复查询的效率。本文通过整理官方文档,介绍Mongodb索引的创建和命名。

索引的创建

在Mongodb中,使用方法createIndex()来创建索引。当相同定义的索引在Mongodb当中不存在时,执行createIndex()时,就会创建该索引。而当索引已经存在时,创建带有相同名字的索引,Mongodb不会改变已有索引。创建带有不同名字的索引时,Mongodb会报错。

使用db.collection.createIndex()方法来创建索引。

复制代码
db.collection.createIndex(<索引字段和类型定义>,<索引选项>)

例如,为集合的name字段添加一个倒序索引。在Mongodb中,对于单字段索引的正序或者倒序排列都不会对性能有很大的影响。因为Mongodb在查询过程中,可以返序通过索引来查找。

复制代码
db.collection.createIndex( {name: -1})

查看创建的索引

使用下面的命令查看创建的索引。

复制代码
db.collection.getIndexes()

指定索引名称

在Mongodb创建索引时,用户可以为索引自定义名称。自定义索引名称能够方便区分其他索引。在查看解释计划的时候很容易的定位到是否使用带有自定义名称的索引。

为创建索引语句添加索引选项,来指定索引名称。

复制代码
db.collection.createIndex(
    {<field>, <value>},
    {name: "<indexName>"}
)

默认索引名称

当用户不指定索引名称是,Mongodb通过链接索引字段名称和用户指定的索引方向或类型作为索引名称来建立索引。如下面表格中定义的索引和名称。

|-----------------------------------------------|------------------------------------|
| 索引 | 默认名称 |
| { score: 1} | score_1 |
| {content: "text", "description.tags": "text"} | content_text_description.tags_text |
| {category: 1, locale: "2dsphere"} | category_1_locale_2dsphere |
| {fieldA: 1, fieldB: hashed, fieldC: -1} | fieldA_1_fieldB_hashed_fieldC_-1 |

注意事项

在创建索引前,用户需要考虑下面两个问题

    • 索引名称要唯一。使用集合中已经存在的索引名称建立新的索引,Mongodb会报错
    • 索引建立以后,不可以重新命名,用户必须删掉索引后,用新名字重新创建。

应用

为集合blog创建索引。

复制代码
db.blog.createIndex(
    {
        content: "text",
        "users.comments": "text",
        "users.profiles": "text"
    },
    {
        name: "InteractionsTextIndex"
    }
)

查看创建的索引

复制代码
db.blog.getIndexes()
相关推荐
DashVector2 小时前
向量检索服务 DashVector产品计费
数据库·数据仓库·人工智能·算法·向量检索
KYGALYX3 小时前
在Linux中备份msyql数据库和表的详细操作
linux·运维·数据库
檀越剑指大厂3 小时前
金仓KReplay:定义数据库平滑迁移新标准
数据库
努力成为一个程序猿.3 小时前
【Flink】FlinkSQL-动态表和持续查询概念
大数据·数据库·flink
毕设十刻4 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
liliangcsdn5 小时前
如何利用约束提示优化LLM在问题转sql的一致性
数据库·sql
Java爱好狂.5 小时前
分布式ID|从源码角度深度解析美团Leaf双Buffer优化方案
java·数据库·分布式·分布式id·es·java面试·java程序员
Elastic 中国社区官方博客5 小时前
通过混合搜索重排序提升多语言嵌入模型的相关性
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
倔强的石头1066 小时前
KingbaseES:从兼容到超越,详解超越MySQL的权限隔离与安全增强
数据库·mysql·安全·金仓数据库
小鸡毛程序员6 小时前
我在CSDN学MYSQL之----数据库基本概念和基本知识(下)
数据库·mysql