每一种索引都有不同的使用场景
createIndex({索引键:排序规则})
函数来创建单字段索引db.collection_name.createIndex({索引键名:排序规则})
实例:为dev集合中的title键创建单字段索引
db.dev.createIndex({
title:1},{
background:true})
实例:在dev集合中的size键创建交叉索引,我认为本质就是多个单字段索引合在一起,这里需要注意与复合索引的区别
db.dev.createIndex({
siez:1},{
background:true})
db.dev.find({
title:"aaa",size:111}) # 同时查询title和size
db.collection_name.createIndex({索引键名:排序规则,索引键名:排序规则,.....})
实例:
db.dev.dropIndexes() # 删除所有索引
db.dev.createIndex({
title:1,size:1},{
background:true})
3. 查看索引:只有一个索引,他们两个合在一起了,这是与交叉索引的本质区别
打个比方 我有AB两个索引,有A可以触发索引 有AB也可以触发索引,但是只有B是不会触发索引的
db.collection_name.createIndex({数组键名:排序规则})
编写测试数据:
db.dev.insert({
title:"dev",tags:["java","python","linux"]})
db.dev.find()
db.dev.createIndex({
tags:1})
db.dev.getIndexes()
db.collection_name.createIndex({索引键名:排序规则},{unique:true})
实例:
db.dev.dropIndexes()
db.dev.createIndex({
title:1},{
unique:true})
插入失败,,抛出异常,因为我的title键中有对应的value一样的
db.dev.find()
db.dev.deleteMany({
})
db.dev.insert({
title:"dev1",size:100})
db.dev.insert({
title:"dev2",size:200})
db.dev.insert({
title:"dev3",size:300})
db.dev.insert({
title:"dev4",size:400})
db.dev.insert({
title:"dev5",size:500})
db.dev.createIndex({
title:1},{
unique:true}) # 创建title的唯一索引
db.collection_name.createIndex({索引键名:排序规则},{partialFilterExpression:{键名:{匹配条件:条件值}}})
db.dev.createIndex({
size:1},{
partialFilterExpression:{
size:{
$gt:300}}})
注意:部分索引只为集合中那些满足指定的筛选条件的文档创建索引,如果你指定的partialFilterExpression是唯一约束、那么唯一约束只适用于满足筛选条件的文档,具有唯一约束的部分索引不会阻止不符合唯一约束且不符合过滤条件的文档的插入
打个比方