MongoDB中索引的用法 转
    索引能提高检索数据的速度,你可以想像成在MySQL中创建索引一样,同样索引也是用B-Tree也实现的。
1.单列索引
在字段x上创建索引,1 (ascending) or -1 (descending)
> db.data.ensureIndex({x:1})  
显示表data里面的所有索引 
> db.data.getIndexes()  
[  
{  
"name" : "_id_",  
"ns" : "recommender.data",  
"key" : {  
"_id" : 1  
}  
},  
{  
"_id" : ObjectId("4befb146b0e29ba1ce20e0bb"),  
"ns" : "recommender.data",  
"key" : {  
"x" : 1  
},  
"name" : "x_1"  
}  
]   
查找字段x为6的值,此时已经用到索引了 
> db.data.find({x:6})  
{ "_id" : ObjectId("4bee804ba23d558eb6687117"), "x" : 6, "name" : "caihuafeng1" }  
{ "_id" : ObjectId("4bee804ba23d558eb6687118"), "x" : 6, "name" : "caihuafeng2" }  
{ "_id" : ObjectId("4bee804ba23d558eb6687119"), "x" : 6, "name" : "caihuafeng3" }  
{ "_id" : ObjectId("4bee804ba23d558eb668711a"), "x" : 6, "name" : "caihuafeng4" }  
{ "_id" : ObjectId("4bee804ba23d558eb668711b"), "x" : 6, "name" : "caihuafeng5" }  
{ "_id" : ObjectId("4bee804ba23d558eb668711c"), "x" : 6, "name" : "caihuafeng6" }  
{ "_id" : ObjectId("4bee804ba23d558eb668711d"), "x" : 6, "name" : "caihuafeng7" }  
{ "_id" : ObjectId("4bee804ba23d558eb668711e"), "x" : 6, "name" : "caihuafeng8" }  
{ "_id" : ObjectId("4bee804ba23d558eb668711f"), "x" : 6, "name" : "caihuafeng9" }  
{ "_id" : ObjectId("4bee804ba23d558eb6687120"), "x" : 6, "name" : "caihuafeng10" }   
2.默认索引
上述1中db.data.getIndexes()显示出来的一共有2个索引,其中_id是创建表的时候自动创建的索引,此索引是不能够删除的。
An index is always created on _id. This index is special and cannot be deleted. The _id index enforces uniqueness for its keys.
3.文档作为索引的键值
a.单列索引
MongoDB的官方文档上面是这样说的:
Documents as Keys
Indexed fields may be of any type, including documents:
往数据库recommender的表data中插入三条记录 
> db.data.insert({name:"1616",info:{url:"http://www.1616.net/",city:"beijing"}});  
> db.data.insert({name:"hao123",info:{url:"http://www.hao123.com/",city:"beijing"}});  
> db.data.insert({name:"ll4la",info:{url:"http://www.114la.com/",city:"dongguan"}});   
对字段info创建索引 
> db.data.ensureIndex({info: 1});   
显示表data上的所有索引 
> db.data.getIndexes();  
[  
{  
"name" : "_id_",  
"ns" : "recommender.data",  
"key" : {  
"_id" : 1  
}  
},  
{  
"_id" : ObjectId("4befb146b0e29ba1ce20e0bb"),  
"ns" : "recommender.data",  
"key" : {  
"x" : 1  
},  
"name" : "x_1"  
},  
{  
"_id" : ObjectId("4befb76bb0e29ba1ce20e0bf"),  
"ns" : "recommender.data",  
"key" : {  
"info" : 1  
},  
"name" : "info_1"  
}  
]   
查找指定的记录,此时会用到索引 
> db.data.find({info: {url:"http://www.1616.net/",city:"beijing"}});  
{ "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } }  
b.组合索引
建立组合索引 
> db.data.ensureIndex({"info.url":1, "info.city":1});  
> db.data.getIndexes();  
[  
{  
"name" : "_id_",  
"ns" : "recommender.data",  
"key" : {  
"_id" : 1  
}  
},  
{  
"_id" : ObjectId("4befb146b0e29ba1ce20e0bb"),  
"ns" : "recommender.data",  
"k