Mongodb( $type和索引)

114 阅读3分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第8篇文章

$type

$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果

MongoDB中可以使用的类型如下表所示:

image-20220915225617131.png

例:查询title字段类型是string的所有文档
db.comment.find({ title: {$type: 2} }).pretty()
例:查询tags字段类型是array的所有文档
db.comment.find({ tags: {$type: 'array'} }).pretty()

索引

说明

  • 索引通常能够极大的提高查询的效率
  • 如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录,这种扫描全集合的查询效率是非常低的。
  • 特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。
  • 索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。

原理

image-20220916220017493.png 注意:

  • 从根本上说,MongoDB的索引与其他数据库系统中的索引类似
  • MongoDB在集合层面上定义了索引,并支持对MongoDB集合中的任何字段或文档的子字段进行索引

操作

  1. 创建索引
db.集合名称.createIndex(keys, options)
例:
db.comment.createIndex({ title: 1, des: -1 }) 
// keys 代表要创建的索引字段,1为升序,-1位降序

options参数:

参数名类型描述
backgroundboolern建索引过程会阻塞其他数据库操作,background可指定一后台方式创建索引,即增加"background"可选参数。默认为false
uniqueboolern建立的索引是否唯一。指定为true创建唯一索引。默认为false
namestring索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序生成一个索引名称。例:name: "title_1des_-1"
sparseboolern对文档中不存在的字段不启用索引,若设为true,在索引字段中不会查询出不包含对应字段的文档。默认为false
expireAfterSecondsinteger指定一个以秒为单位的数值,完成TTL设定,设定集合的生存时间
vindex, version索引的版本号。默认的索引版本取决于mongodb创建索引时运行的版本
weightsdocument索引权重值,数值在1 - 9.9999万,表示该索引相对于其他索引字段的得分权重
default_languagestring对于文本索引,该参数决定了停用词及词干和词器的规则的列表。默认为英语
language_overridestring对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为language
  1. 查看集合索引
db.集合名称.getIndexes()
  1. 查看集合索引大小
db.集合名称.totalIndexSize()
  1. 删除集合所有索引
db.集合名称.dropIndexes() // 不包括系统默认的_id索引
  1. 删除集合指定索引
db.集合名称.dropIndex('索引名称')