db.集合名.ensureIndex({属性:1})
,1表示升序, -1表示降序测试:插入10万条数据到数据库中
for(i=0;i<100000;i++){db.t1.insert({name:'test'+i,age:i})}
db.t1.find({name:'test10000'})
db.t1.find({name:'test10000'}).explain('executionStats') # 显示查询操作的详细信息
"executionStats": { "executionSuccess": true, "nReturned": NumberInt("1"), "executionTimeMillis": NumberInt("58"), "totalKeysExamined": NumberInt("0"), "totalDocsExamined": NumberInt("100000"), "executionStages": { "stage": "COLLSCAN", "filter": { "name": { "$eq": "test10000" } } } }
db.t1.ensureIndex({name:1})
db.t1.find({name:'test10000'}).explain('executionStats')
"executionStats": { "executionSuccess": true, "nReturned": NumberInt("1"), "executionTimeMillis": NumberInt("2"), "totalKeysExamined": NumberInt("0"), "totalDocsExamined": NumberInt("100000"), "executionStages": { "stage": "COLLSCAN", "filter": { "name": { "$eq": "test10000" } } } }
db.集合名.getIndexes()
db.集合名.dropIndex({'索引名称':1})
db.t1.dropIndex({name:1})
db.t1.dropIndex("name_1")
db.t1.getIndexes()
在默认情况下mongdb的索引域的值是可以相同的,创建唯一索引之后,数据库会在插入数据的时候检查创建索引域的值是否存在,如果存在则不会插入该条数据,但是创建索引仅仅能够提高查询速度,同时降低数据库的插入速度。
db.集合名.ensureIndex({"字段名":1}, {"unique":true})
根据唯一索引指定的字段的值,如果相同,则无法插入数据
db.t1.ensureIndex({name:1}, {"unique":true})
db.t1.getIndexes()
db.t1.insert({name: 'test10000'})
db.collection_name.ensureIndex({字段1:1,字段2:1})
例如:在进行查询的时候如果字段1需要升序的方式排序输出,字段2需要降序的方式排序输出,那么此时复合索引的建立需要把字段1设置为1,字段2设置为-1