1.创建索引
这里contests是我建立的记录表,use_id是其中的字段。数字1表示键的索引按升序存储,-1表示键的索引按照降序方式存储。
db.cotests.ensureIndex({"user_id":1})
2.查询索引
db.contests.getIndexes()
可以看到查询后的结果,contests有两个索引,其中id索引是默认建立的,该索引唯一,且不能删除。
3.删除索引。从下面的图片可以看到,用db.contests.dropIndex({“user_id”:1})之后再次查询,只剩下应该索引了。
4.建立唯一索引
在一次数据库操作中,我把相同的数据insert了两次,事后计算才发现结果不对。为了避免这种情况,需要建立唯一索引。下面的命令就是给contests创建了一个唯一索引,有相同的user_id的数据无法被插入到数据库。
db.contests.ensureIndex({'user_id':1},{'unique':true})
但是在学习建立唯一索引的过程中,也遇到一些问题。刚开始我是直接使用了上面那条语句,然后报错。"E11000 duplicate key error collection: shiyanlou.contests index: user_id_1 dup key: { : 1.0 }
后来发现这是因为contests里面已有的的user_id的数据不唯一,所以我把contests删了,在插入数据之前就执行上面的语句。然后再执行insert。
按理说这样就没有问题了,我插入的数据还是contests原有的数据,也就是说,user_id是不唯一的。20条记录对应10个用户。本来我想的是,设置了唯一索引后,再次插入,数据库会自动排除那些user_id已存在的数据。所以按理说最后插入成功的数据应该是10条,但事实并非如此。我一次性插入的20条数据最后只导入了3条。找了很久的原因才发现是第四条数据的user_id和前面三条有重复的,所以后面数据都没有插入到数据库。
所以唯一索引的使用方法现在还是有点不清楚,后面会慢慢深入。