加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

MongoDB通配符索引咋用?

发布时间:2022-04-22 10:38:53 所属栏目:系统 来源:互联网
导读:这篇文章给大家介绍的是关于MongoDB通配符索引的用法内容,小编认为是比较实用,因此分享给大家作参考,有这方面学习需要的朋友可以看看。 MongoDB在4.2 版本推出了Wildcard Indexes,究竟什么是Wildcard Indexes以及Wildcard Indexes适合哪些场景本文结合官
       这篇文章给大家介绍的是关于MongoDB通配符索引的用法内容,小编认为是比较实用,因此分享给大家作参考,有这方面学习需要的朋友可以看看。
 
       MongoDB在4.2 版本推出了Wildcard Indexes,究竟什么是Wildcard Indexes以及Wildcard Indexes适合哪些场景本文结合官方文档以及实际测试进行简单概述。
 
       1、通配符索引示例
 
       因为MongoDB是dynamic schemas,所以应用是可以查询任何已知字段或者随机字段的。假设(此假设案例摘自官方文档),集合colA的UserMetadata字段包含如下数据:
 
{ "userMetadata" : { "likes" : [ "dogs", "cats" ] } }
{ "userMetadata" : { "dislikes" : "pickles" } }
{ "userMetadata" : { "age" : 45 } }
{ "userMetadata" : "inactive" }
       但是在查询的时候可能是如下语句:
 
db.colA.find({ "userMeta2
通配符索引的形式data.likes" : "dogs" })
db.colA.find({ "userMetadata.dislikes" : "pickles" })
db.colA.find({ "userMetadata.age" : { $gt : 30 } })
db.colA.find({ "userMetadata" : "inactive" })
       是否能通过一个索引来完成上述需求?答案是肯定的,上述查询可以通过通配符索引来实现既定需求,也就是 db.colA.createIndex( { "userMetadata.$**" : 1 } )。
 
       那么如何创建通配符索引?
 
       注意:首先应该明确的是通配符索引只在版本兼容性4.2的时候才能创建。
 
       如何查询版本兼容性?
 
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
       如何设置?
 
db.adminCommand( { setFeatureCompatibilityVersion: "4.2" } )
 
       2、通配符索引的形式
 
       单字段通配符索引
 
如果数据结构是上面这样的,其中product_attributes 属性包含任何的结构。
 
那么如果我们创建一个这个索引,它会进行什么操作?
 
db.product_catalog.createIndex({"product_attributes.$**":1})。
 
因为product_attributes 里面包含数组和嵌套文档等对象,实际创建这个索引后,会迭代嵌套文档或者数组把里面的所有的值都取出来放到索引里。支持如下查询:
 
db.product_catalog.find({"product_attributes.colors":"Blue"})
db.product_catalog.find({"product_attributes.secret_feature.name":"laser"})
db.product_catalog.find({"product_attributes.size.length":{$gt:60}})

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读