语法:
db.collection.createIndex(keys,options) options常用: background Boolean 可以保证索引在后台运行,不影响其它操作,对于大集合数据比较有用。 unique Boolean 是否唯一索引 name String 索引名称。不指定则默认生成 sparse Boolean 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false. expireAfterSeconds integer 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。 v index version 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。 weights document 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。 default_language string 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语 language_override string 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.
常用方法:
db.collection.getIndexes() 查看集合索引 db.collection.totalIndexSize() 查看集合索引大小 db.collection.dropIndexes() 删除集合所有索引 db.collection.dropIndex("索引名称") 删除指定索引
常用索引:
一,单列索引: 单列无内嵌对象 db.collection.createIndex({column:1}) db.集合名.createIndex({列名:升序/(1)降序(-1)}) 单列有内嵌doument 可以对整个列加索引,也可以对内嵌document里的某一个字段建立索引 例如有document如下: { "_id":ObjectId("xxxxxxxxxxxxxxxxxxxxxxxxx"), "score":1034, "location":{state:"NY",city:"New York"} } 可以这样建: db.collection.createIndex({location:1}) or db.collection.createIndex({"location.state":1}) 查询的时候可以这样: db.collection.find({"location":{"state":"CA","city":"NY"}}) db.collection.find({"location.state":"NY"}) 二,复合索引 最多支持32个字段复合索引 db.collection.createIndex({<field1>:<type>,<field2>:<type>,...}) 复合索引的顺序很重要,首先会按照field1的顺序排序,再在field1的顺序里按照field2的type排序 所以查询的时候可以全字段匹配,也可以匹配按顺序的第一个字段,有点类似早期的MYSQL,需要按索引的顺序写查询语句 三,多键索引 在版本3.4中更改:仅适用于WiredTiger和内存存储引擎 为了索引一个包含数组值的字段,MongoDB为数组中的每个元素创建一个索引键。这些多键索引支持对数组字段的高效查询 如果在一个数组类型上的field建立索引 直接用和单列索引的方法即可,mongodb会自动创建multikey index 四,文本索引 针对field类型是string的建立文本索引 db.collection.createIndex({<field>:"text"}) 一个集合最多可以有1个文本索引,但是可以在多个string类型的field上建立一个文本索引 例如: db.collection.createIndex( { subject: "text", comments: "text" }, { name:"mytextindex", default_language:"english", default_override:"language" } )