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