天天看点

第五章 MongoDb索引优化 5.2

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"),

"x" : 1

"name" : "x_1"

"_id" : ObjectId("4befb76bb0e29ba1ce20e0bf"),

"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});

"_id" : ObjectId("4befb9d1b0e29ba1ce20e0c0"),

"info.url" : 1,

"info.city" : 1

"name" : "info.url_1_info.city_1"

下面几个操作均会用到索引

> db.data.find({"info.url": "http://www.1616.net/", "info.city": "beijing"});

> db.data.find({"info.url": "http://www.1616.net/"});

1表示升序(asc),-1表示降序(desc)

> db.data.find({"info.url": /http:*/i}).sort({"info.url": 1, "info.city": 1});

{ "_id" : ObjectId("4befb740b0e29ba1ce20e0be"), "name" : "ll4la", "info" : { "url" : "http://www.114la.com/", "city" : "dongguan" } }

{ "_id" : ObjectId("4befb723b0e29ba1ce20e0bd"), "name" : "hao123", "info" : { "url" : "http://www.hao123.com/", "city" : "beijing" } }

> db.data.find({"info.url": /http:*/i}).sort({"info.url": 1});

> db.data.find({"info.url": /http:*/i}).sort({"info.url": -1});

本文转自jooben 51CTO博客,原文链接:http://blog.51cto.com/jooben/365899