MongoDB-稀疏索引

索引的稀疏性

默认情况下 MongoDB 会给每一个文档都创建索引, 哪怕这个文档中没有指定索引的字段或者字段的取值是 Null,但是这样大大增加了索引的体积, 所以为了进一步优化索引占用的存储空间, 我们可以创建稀疏索引,也就是只会为存在索引字段, 并且索引字段取值不是 null 的文档创建索引。

书写格式:

db.<collection>.createIndex({<field>:<1 or -1>, ...}, {sparse:true}})

插入测试数据:

db.person.insert([
{name:'cs', age:19},
{name:'as', age:18},
{name:'bs', age:17}
])

首先先创建一个唯一索引:

db.person.createIndex({age:1}, {unique:true})

然后插入数据测试:

db.person.insert({name:'BNTang'})

第一次插入是不会报错,但是在第二次进行插入是会报错的,因为两次插入的数据结构如下:

BNTang null
BNTang null

所以在我们创建的唯一索引他会认为这是两个相同的数据,那么这个时候就可以利用我这次要介绍的索引的稀疏索引来解决该问题,如果索引具备了唯一性又具备了稀疏性, 那么就可以多次添加缺失了索引字段的文档了。

创建唯一索引与稀疏索引:

db.person.createIndex({age:1}, {unique:true, sparse: true})

多次运行插入,你会发现都成功了,在创建唯一索引与稀疏索引之前需要将之前的唯一索引先删除了在添加:

db.person.insert({name:'BNTang'})

!> 如果索引字段既具备唯一性又具备稀疏性, 那么就可以在集合中保存多个缺失唯一索引字段的文档,原因:如果索引具备了稀疏性, 那么就不会为缺失了索引字段或者索引字段取值是 null 的文档创建索引了, 所以就不会冲突了。

posted @   BNTang  阅读(283)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示