Mongodb通配符文本索引的用法详解
作者:威赞
学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第99篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关注威赞。谢谢。威赞文章都是结合官方文档,翻译整理而来,并对每个知识点的描述都认真思考和实践,对难以理解的地方,使用简单容易理解的方式进行阐述。
通配符索引为Mongodb灵活的数据结构,提供了高效查询的解决方案。但Mongodb文档中明确的提出来,通配符索引和通配符文本索引,是两个完全不同的索引。那通配符文本索引到底是什么样的方式来运作,本文继续研究官方文档,来归纳总结通配符文本索引的介绍和用法。
概述
用户可以为集合中多个文本字段创建一个文本索引。这种集合多个字段的索引,就是通配符文本索引。通配符文本索引支持未知字段,可变字段和动态生成字段的文本查询。
使用通配标识符$**和索引类型text来构建通配符文本索引。
db.<collection>.createIndex({"$**": "text"})
通配符索引和通配符文本索引,是不同的索引。通配符文本索引支持使用$text操作符的查询, 而通配符索引不支持使用该操作符查询。
当用户在集合中添加通配符文本索引后,向集合中插入数据或者数据更新时,在通配符文本索引中的数据都会更新。因此,通配符文本索引对数据插入和更新有负面的影响。Mongodb建议,仅在字段不确定或未来字段可能发生变化时,使用通配符文本索引。通配符文本索引于其他索引的工作方式不一致。当集合中包含了过多随意的字段导致创建索引困难时,要考虑重新定义数据的结构。
应用
创建blog集合并插入数据
db.blog.insertMany([ { "_id": 1, "content": "This is a blog post about MongoDB", "about": "MongoDB", "keywords": [ "MongoDB", "database", "NoSQL" ] }, { "_id": 2, "content": "This is a blog post about MongoDB and Python", "about": "MongoDB", "keywords": [ "MongoDB", "Python" ] }, { "_id": 3, "content": "This is a blog post about NoSQL databases", "about": "NoSQL", "keywords": [ "NoSQL", "database" ] } ])
构建通配符文本索引
db.blog.createIndex({"$**": "text"})
使用通配符索引查询
db.blog.find({$text: {$search: "MongoDB"}})
查看执行计划
匹配多个字符串
db.blog.find({$text: {$search: "MongoDB NoSQL"}})
到此这篇关于Mongodb通配符文本索引的文章就介绍到这了,更多相关Mongodb通配符内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!