MongoDB——索引类型之通配符索引(Wildcard Indexes)
Posted 小志的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB——索引类型之通配符索引(Wildcard Indexes)相关的知识,希望对你有一定的参考价值。
目录
一、MongoDB官网地址
二、通配符索引(Wildcard Indexes)的概述
- MongoDB的文档模式是动态变化的,而通配符索引可以建立在一些不可预知的字段上,以此实现查询的加速。
- MongoDB 4.2 引入了通配符索引来支持对未知或任意字段的查询。
三、通配符索引(Wildcard Indexes)的示例
3.1、准备商品数据,不同商品属性不一样
-
准备数据集,执行脚本
db.products.insert([ "product_name" : "Spy Coat", "product_attributes" : "material" : [ "Tweed", "Wool", "Leather" ], "size" : "length" : 72, "units" : "inches" , "product_name" : "Spy Pen", "product_attributes" : "colors" : [ "Blue", "Black" ], "secret_feature" : "name" : "laser", "power" : "1000", "units" : "watts", , "product_name" : "Spy Book" ])
-
查看初始化的数据
db.products.find()
3.2、创建通配符索引
-
创建通配符索引
db.products.createIndex( "product_attributes.$**" : 1 )
-
查看创建的通配符索引
> db.products.getIndexes()
3.3、测试
-
通配符索引可以支持任意单字段查询 product_attributes或其嵌入字段
-
测试1
db.products.find( "product_attributes.size.length" : $gt : 60 )
-
测试2
> db.products.find( "product_attributes.material" : "Leather" ).pretty()
-
测试3
> db.products.find( "product_attributes.secret_feature.name" : "laser" ).pretty()
四、通配符索引(Wildcard Indexes)的限制
4.1、通配符索引不支持以下索引类型或属性
-
不支持以下索引类型或属性
(1)、 Compound
(2)、TTL
(3)、 Text
(4)、 2d(Geospatial)
(5)、2dsphere(Geospatial)
(6)、 Hashed
(7)、 Unique
-
示例:创建通配符索引的复合索引,提示不能创建此索引
db.products.createIndex( "product_attributes.$**" : 1,"product_name":1 )
4.2、通配符索引不能支持查询字段不存在的文档
通配符索引是稀疏的,不索引空字段。因此,通配符索引不能支持查询字段不存在的文档。
-
示例:
-
通配符索引不能支持以下查询,由下图可知,可以查询出数据。
db.products.find( "product_attributes" : $exists : false )
-
但是查看执行计划,发现是集合扫描(相当于全表扫描),没有走索引。
> db.products.find( "product_attributes" : $exists : false ).explain()
4.3、通配符索引不能支持精确的文档或者数组相等匹配
通配符索引为文档或数组的内容生成条目,而不是文档/数组本身。因此通配符索引不能支持精确的文档/数组相等匹配。通配符索引可以支持查询字段等于空文档的情况。
-
示例
-
通配符索引不能支持以下查询,由下图可知,可以查询出数据。
> db.products.find( "product_attributes.colors" : [ "Blue", "Black" ] )
-
但是查看执行计划,发现是集合扫描(相当于全表扫描),没有走索引。
> db.products.find( "product_attributes.colors" : [ "Blue", "Black" ] ).explain()
以上是关于MongoDB——索引类型之通配符索引(Wildcard Indexes)的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB——索引类型之Hash索引(Hashed Indexes)
MongoDB——索引类型之Hash索引(Hashed Indexes)
MongoDB——索引类型之全文索引(Text Indexes)