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}}) (编辑:常州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |