日期:2014-05-16 浏览次数:20410 次
?
本文内容源自Kyle Banker?的?MongoDB?In Action一书。主要描述了MongoDB索引相关的一些基础知识和使用技巧。
虽然MongoDB的索引在存储结构上都是一样的,但是根据不同的应用层需求,还是分成了唯一索引(unique)、稀疏索引(sparse)、多值索引(multikey)等几种类型。
唯一索引在创建时加上unique:true 的选项即可,创建命令如下:
?
db.users.ensureIndex({username: 1}, {unique: true})
?上面的唯一索引创建后,如果insert一条username已经存在的数据,则会报如下的错误:
?
E11000 duplicate key error index: gardening.users.$username_1 dup key: { : "kbanker" }
?如果你在一个已有数据的collection上创建唯一索引,若唯一索引对应的字段原来就有重复的数据项,那么创建会失败,我们需要加上一个dropDups的选项来强制将重复的项删除掉,命令如下例:
?
db.users.ensureIndex({username: 1}, {unique: true, dropDups: true})?
如果你的数据中一些行中没有某个字段或字段值为null,那么如果在这个字段上建立普通索引,那么无此字段或值null的行也会参与到索引结构中,占用相应的空间。如果我们不希望这些值为空的行参与到我们的索引中,这时候可以采用松散索引,松散索引只会让指定字段不为空的行参与到索引创建中来。创建一个松散索引可以用下面的命令:
?
db.reviews.ensureIndex({user_id: 1}, {sparse: true})
?
MongoDB可以对一个array类型创建索引,比如像下面的结构,MongoDB可以在tags字段上创建索引:
?
{ name: "Wheelbarrow", tags: ["tools", "gardening", "soil"] }?
?
在生成索