mongodb索引

MongoDB的索引,mongoDB3.6

3.0之前

Deprecated since version 3.0.0: db.collection.ensureIndex() is now an alias for db.collection.createIndex().

mongodb3.0之后,以下创建的方法都过时了

1
db.collection.ensureIndex()

这两个能继续用

1
2
db.collection.dropIndexes()
db.collection.getindexes()

3.0之后

db.collection.createIndex(keys, options)

options可选,可能用到的如下

1
2
3
4
5
6
background 默认false,true的话会后台执行,不会阻塞其他动作
unique 默认false,是否值唯一
name 给定义一个索引名称,这个非特殊必要不用去定义
partialFilterExpression 过滤表达式,表达式对象,类型啊,大小啊,是否存在啊啥的
sparse 默认false,true的话,只给字段存在的建索引,
expireAfterSeconds 需要一个整数秒,MongoDB的ttl,过了MongoDB会把文档删掉

db.collection.createIndexes([keyPatterns, ]options)

下面批量添加是3.2后才有的方法

其他的

collation

The collation option is available for all index types except for text indexes.

3.4之后才有的,比如里面有个locate的,可以指定地域,从而可以实现中文排序

ttl

time to live 生存时间

explain查询优化器

在语句之后,使用.explain()方法可以进行性能分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
> db.zthx_ics.createIndex({'name':1})
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
> db.zthx_ics.explain().find({'name':'liujia'})
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "zthx_ics.zthx_ics",
"indexFilterSet" : false,
"parsedQuery" : {
"name" : {
"$eq" : "liujia"
}
},
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"name" : 1
},
"indexName" : "name_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"name" : [ ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"name" : [
"[\"liujia\", \"liujia\"]"
]
}
}
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "jenkins",
"port" : 27018,
"version" : "3.6.0",
"gitVersion" : "a57d8e71e6998a2d0afde7edc11bd23e5661c915"
},
"ok" : 1
}

$lookup

使用$lookup做多表关联处理

https://docs.mongodb.com/master/reference/operator/aggregation/lookup/#lookup-syntax-let-pipeline

坚持原创技术分享,您的支持将鼓励我继续创作!