mongodb是一种文档型存储,每个文旦的格式是bson,比JSON性能更好。 mongodb的索引其实就是单独一份存储。

索引类型

单键索引(single field index)

db.userinfos.createIndex({"name":1})

复合索引(compound index):

db.userinfos.createIndex({"name":1,"age":-1})

多键索引(multiKey index):

db.userinfos.createIndex({'info.age':1})

哈希索引(hashed index):将field的值进行hash计算之后作为索引,可以实现O(1)查找。

db.userinfos.createIndex({'name':'hashed'})

索引属性

唯一索引:插入重复值时会报错

db.userinfos.createIndex({name:1},{unique:true})

局部索引:只对插入元素满足特定约束的时候才会更新到索引里面

    db.userinfos.createIndex(
        {age:1},
        { partialFilterExpression: {age:{$gt: 25 }}}
    )

稀疏索引:稀疏索引指只有当value存在的时候才会更新到索引里面。

db.userinfos.createIndex({address:1},{sparse:true})

TTL索引:TTL索引(TTL indexes)是一种特殊的单键索引,用于设置document的过期时间,mongoDB会在document过期后将其删除,TTL非常容易实现类似缓存过期策略的功能。我们看一个使用TTL索引的栗子。

db.logs.insertMany([
       {_id:1,createtime:new Date(),msg:"log1"},
       {_id:2,createtime:new Date(),msg:"log2"},
       {_id:3,createtime:new Date(),msg:"log3"},
       {_id:4,createtime:new Date(),msg:"log4"}
       ])
//在createtime字段添加TTL索引,过期时间是120s
db.logs.createIndex({createtime:1}, { expireAfterSeconds: 120 })