MongoDB基础知识 之 索引类型介绍
MongoDB 4.2官方支持索引类型以下:
- 单字段索引
- 复合索引
- 多键索引
- 文本索引
- 2dsphere索引
- 2d索引
- geoHaystack索引
- 哈希索引
单字段索引
在单个字段上创建升序索引
[
{
“v” : 2,
“key” : {
“_id” : 1
},
“name” : “_id_”,
“ns” : “db6.test”
}
]
在字段id上添加升序索引
[
{
“v” : 2,
“key” : {
“_id” : 1
},
“name” : “_id_”,
“ns” : “db6.test”
},
{
“v” : 2,
“key” : {
“id” : 1
},
“name” : “id_1”,
“ns” : “db6.test”
}
]
上述查询可使用新建的单字段索引。
在嵌入式字段上创建索引
以下查询可以用的新建的索引。
在内嵌文档上创建索引
{
“createdCollectionAutomatically” : false,
“numIndexesBefore” : 3,
“numIndexesAfter” : 4,
“ok” : 1,
“$clusterTime” : {
“clusterTime” : Timestamp(1621324059, 2),
“signature” : {
“hash” : BinData(0,”AAAAAAAAAAAAAAAAAAAAAAAAAAA=”),
“keyId” : NumberLong(0)
}
},
“operationTime” : Timestamp(1621324059, 2)
}
以下查询可使用新建的索引。
复合索引
创建复合索引
以下查询可以用到新建的复合索引
多键索引
基于一个数组创建索引,MongoDB会自动创建为多键索引,无需刻意指定。
多键索引也能够基于内嵌文档来创建。
多键索引的边界值的计算依赖于特定的规则。
查看文档:
{ “_id” : ObjectId(“60a32d7f1f183b1d8f0920ad”), “name” : “dandan”, “age” : 30, “score” : [ { “english” : 90, “math” : 99, “physics” : 88 } ], “is_del” : false }
{ “_id” : ObjectId(“60a32d8b1f183b1d8f0920ae”), “name” : “dandan”, “age” : 30, “score” : [ 99, 98, 97, 96 ], “is_del” : false }
{ “_id” : ObjectId(“60a32d9a1f183b1d8f0920af”), “name” : “dandan”, “age” : 30, “score” : [ 100, 100, 100, 100 ], “is_del” : false }
{ “_id” : ObjectId(“60a32e8c1f183b1d8f0920b0”), “name” : “dandan”, “age” : 30, “score” : [ { “english” : 70, “math” : 99, “physics” : 88 } ], “is_del” : false }
{ “_id” : ObjectId(“60a37b141f183b1d8f0aa751”), “name” : “dandan”, “age” : 30, “score” : [ 96, 95 ] }
{ “_id” : ObjectId(“60a37b1d1f183b1d8f0aa752”), “name” : “dandan”, “age” : 30, “score” : [ 96, 95, 94 ] }
{ “_id” : ObjectId(“60a37b221f183b1d8f0aa753”), “name” : “dandan”, “age” : 30, “score” : [ 96, 95, 94, 93 ] }
创建score字段多键索引:
查看履行计划:
可以看到已使用了新建的多键索引。
文本索引
为了支持对字符串内容的文本搜索查询,MongoDB提供了文本索引。文本(text )索引可以包括任何值为字符串或字符串元素数组的字段
查看履行计划:
可以看到通过文本索引可以查到包括测试关键字的数据。
**注意:**可以根据自己需要创建复合文本索引。
2dsphere索引
创建测试数据
{
loc : { type: “Point”, coordinates: [ 116.291226, 39.981198 ] },
name: “火器营桥”,
category : “火器营桥”
}
)
db.places.insert(
{
loc : { type: “Point”, coordinates: [ 116.281452, 39.914226 ] },
name: “五棵松”,
category : “五棵松”
}
)
db.places.insert(
{
loc : { type: “Point”, coordinates: [ 116.378038, 39.851467 ] },
name: “脚门西”,
category : “脚门西”
}
)
db.places.insert(
{
loc : { type: “Point”, coordinates: [ 116.467833, 39.881581 ] },
name: “潘家园”,
category : “潘家园”
}
)
db.places.insert(
{
loc : { type: “Point”, coordinates: [ 116.468264, 39.914766 ] },
name: “国贸”,
category : “国贸”
}
)
db.places.insert(
{
loc : { type: “Point”, coordinates: [ 116.46618, 39.960213 ] },
name: “三元桥”,
category : “三元桥”
}
)
db.places.insert(
{
loc : { type: “Point”, coordinates: [ 116.400064, 40.007827 ] },
name: “奥林匹克森林公园”,
category : “奥林匹克森林公园”
}
)
添加2dsphere索引
利用2dsphere索引查询多边形里的点
凤凰岭
[116.098234,40.110569]
天安门
[116.405239,39.913839]
四惠桥
[116.494351,39.912068]
望京
[116.494494,40.004594]
… { $geoWithin :
… { $geometry :
… { type : “Polygon” ,
… coordinates : [ [
… [116.098234,40.110569] ,
… [116.405239,39.913839] ,
… [116.494351,39.912068] ,
… [116.494494,40.004594] ,
… [116.098234,40.110569]
… ] ]
… } } } } )
{ “_id” : ObjectId(“60a4c950d4211a77d22bf7f8”), “loc” : { “type” : “Point”, “coordinates” : [ 116.400064, 40.007827 ] }, “name” : “奥林匹克森林公园”, “category” : “奥林匹克森林公园” }
{ “_id” : ObjectId(“60a4c94fd4211a77d22bf7f7”), “loc” : { “type” : “Point”, “coordinates” : [ 116.46618, 39.960213 ] }, “name” : “三元桥”, “category” : “三元桥” }
{ “_id” : ObjectId(“60a4c94fd4211a77d22bf7f6”), “loc” : { “type” : “Point”, “coordinates” : [ 116.468264, 39.914766 ] }, “name” : “国贸”, “category” : “国贸” }
可以看到把集合中包括在指定四边形里的点,全部列了出来。
利用2dsphere索引查询球体上定义的圆内的点
… { $geoWithin :
… { $centerSphere :
… [ [ 116.439518, 39.954751 ] , 2/3963.2 ]
… } } } )
{ “_id” : ObjectId(“60a4c94fd4211a77d22bf7f7”), “loc” : { “type” : “Point”, “coordinates” : [ 116.46618, 39.960213 ] }, “name” : “三元桥”, “category” : “三元桥” }
返回所有半径为经度 116.439518 E 和纬度 39.954751 N 的2英里内坐标。示例将2英里的距离转换为弧度,通过除以地球近似的赤道半径3963.2英里。
2d索引
在以下情况下使用2d索引:
- 您的数据库具有来自MongoDB 2.2或更早版本的旧版旧版坐标对。
- 您不打算将任何位置数据存储为GeoJSON对象。
哈希索引
要创建hashed索引,请指定 hashed 作为索引键的值,以下例所示:
注意事项
- MongoDB支持任何单个字段的 hashed 索引。hashing函数折叠嵌入的文档并计算全部值的hash值,但不支持多键(即.数组)索引。
- 您不能创建具有hashed索引字段的复合索引,也不能在索引上指定唯一束缚hashed;但是,您可以hashed在同一字段上创建索引和升序/降序(即非哈希)索引:MongoDB将对范围查询使用标量索引。
文章来源:丸子建站
文章标题:MongoDB基础知识 之 索引类型介绍
https://www.wanzijz.com/view/72550.html
相关文章
Related articles
- 1 Linux 下删除虚拟 IP 的操作方法 2023-08-18 08:05:48
- 2 java反编译工具的有哪些作用 2023-08-18 08:05:46
- 3 CentOS服务器系统下 PostgreSQL 12 主从复制操作 主从切换 2023-08-18 08:05:46
- 4 python 爬视频链接 2023-08-18 08:05:44
- 5 基于ORA⑴9815闪回空间爆满问题的处理方法 2023-08-18 08:05:41
- 6 python 爬虫的简介 2023-08-18 08:05:41
- 7 Linux 你好!——打开Linux世界之门 2023-08-18 08:05:39
- 8 win7序列号如何查看 2023-08-18 08:05:38
- 9 使用共享主机优势和劣势是什么 2023-08-18 08:05:36
- 10 python 爬虫爬电影 2023-08-18 08:05:34
随机看看
NEW ARTICLE
- 1 视频存储云主机保存的文件格式是什么 05-31
- 2 美国高防服务器的租用价格受到什么因素影响 05-04
- 3 php如何建立站点 05-12
- 4 css为啥会加载失败 03-24
- 5 的登录管理SQL Server中sa用户的登录权限管理 05-30
- 6 SQL Server表扫描:优化查询的关键 04-21
热门文章
HOT ARTICLE
- 1 显卡:centos查看显卡信息的方法 04-07
- 2 黑客利用SQLServer数据库成功实行盲注入攻击 05-11
- 3 android开发工具有哪些?又该如何进行选择? 02-13
- 4 公众号和订阅号有什么区别?公众号和订阅号有什么优势? 01-30
- 5 python怎么获取列表元素的下标 03-23
- 6 navicat:navicat怎样连接mongodb 04-04
- 7 速率:centos7怎么查看网卡速率 04-07
- 8 字体:小程序字体加粗怎么实现 04-09
- 9 公众号登录的方法是什么?公众号登录失败的原因是什么? 01-30
- 10 【mssql中实现多个like查询的方式】 04-21