MongoDb索引使用介绍
mongodb索引
1._id索引:默认索引
2.单键索引:例如一条记录:{x:1,y:2,z:3} ,语句db.collection.ensureindex({x:1}),表示对x创建一个升序索引x:1后面的这个值1代表升序,-1代表降序。
3.多键索引:多键索引与单键索引创建形式相同,区别在于字段的值。值可能有多个记录,例如数组.{x:[1,2,3,4,5]}
4.复合索引:当我们的查询条件不止一个时,就需要建立复合索引。例如一条记录{x:1,y:2,z:3},语句db.collection.ensureindex({x:1,y:1})
5.过期索引:在一段时间后会过期的索引,在索引过期后,相应的数据会被删除,这适合存储一些在一段时间过后会失效的数据,比如用户的登录信息,存储的日志等。例如插入一条记录db.collection.insert({time:new date()})表示插入一条当前时间的数据,db.collection.ensureindex({time:1},{expireafterseconds:10}),建立过期索引,time字段的数据在10后会被删除,但是这个10s不是确定的值,因为mongodb删除进程是一分钟检测一次,所以当设置的expireafterseconds小于一分钟时,其实还是会一分钟后再删除。
6.全文索引:对字符串与字符串数组创建全文可搜索的索引。适用于:{author:"",title:"",article:""},author表示作者,title表示标题,article表示内容。
例如:db.collection.ensureindex({key:"text"}),类似于前面的单键索引,不同的是单键索引的key是字段名,value是1或者-1,而这里key和字段名相同,但是value就是固定的text这个字符串。
如果需要创建多个字段的全文索引,db.collection.ensureindex({key_1:"text",key_2:"text"}),类似于前面的多键索引。
如果需要对所有的字段都创建索引,可以使用db.collection.ensureindex({"$**":"text"}),表示对所有字段的值就进行索引。
提一句,全文索引只允许有一个,进行全文索引查询的时候的key就不用写了,key就是我们在索引中写的key。
使用全文索引进行查询: db.collection.find({$text:{$search:"aaa"}}),表示查询数据中包含aaa的数据,有多条数据就返回多条。
db.collection.find({$text:{$search:"aa bb cc dd"}}),表示查询数据中包含aa或者bb或者cc或者dd的数据,有多条数据就返回多条。这里的空格表示或。
db.collection.find({$text:{$search:"aa bb -cc"}}),表示查询数据中包含aa或者bb但不包含cc的数据,有多条就返回多条,这里的符号表示非。
db.collection.find({$text:{$search:"\"aa\" \"bb\" \"cc\""}}),表示查询的数据中包含aa与bb与cc,有多条就返回多条,这里的\"其实表示的就是",因为外面有一层",我们在里面使用"时就要加转义字符\,这里的引号表示与。
7.全文索引相似度:这个是针对于全文索引的,平常我们在百度搜索的时候就会对我们输入的关键字进行匹配,在mongodb的查询中mongodb已经帮我们考虑到这一点了。$meta操作符:{score:{$meta:"textscore"}},写在查询后面就可以返回查询结果的相似度,与sort一起使用,可以达到根据相似度排序的效果。
这里使用上面全文索引的第一个查询来做实例:db.colletion.find({$text:{$search:"aaa"}},score:{$meta:"textscore"}),这个查询的结果里面就会多一个相似度的字段。我们可以根据这个相似度进行排序。例如:db.collection.find($text:{$search:"aaa"},score:{$meta:"textscore"}).sort(score:{$meta:"textscore"}),这样我们就可以根据相似度进行排序了。
8.全文索引的使用限制: tip1.每次查询只能指定一个$text查询
tip2.$text查询不能出现在$nor查询中
tip3.查询中如果包含$text,hint将不再起作用
tip4.\\3.2版本之前全文索引不支持中文,3.2版本之后开始支持中文
上一篇: 解决mac上Navicat新建数据库3680错误问题
下一篇: SQLite3中自增主键相关知识总结