您的位置:首页 > 数据库 > Mongodb

第五章 MongoDb索引优化 5.2

2010-08-02 21:56 375 查看
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",

"key" : {

"x" : 1

},

"name" : "x_1"

},

{

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

"ns" : "recommender.data",

"key" : {

"info" : 1

},

"name" : "info_1"

},

{

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

"ns" : "recommender.data",

"key" : {

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

{ "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } }

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

{ "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } }

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("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } }

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

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

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

{ "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } }

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

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

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

{ "_id" : ObjectId("4befb711b0e29ba1ce20e0bc"), "name" : "1616", "info" : { "url" : "http://www.1616.net/", "city" : "beijing" } }

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

本文出自 “lee” 博客,请务必保留此出处http://jooben.blog.51cto.com/253727/365899
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: