-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmongodb笔记.txt
executable file
·193 lines (155 loc) · 5.39 KB
/
mongodb笔记.txt
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
----------------------------------------------MongoDB 教程--------------------------------------------------
1.db // 显示当前
2.use local // 使用数据库,如果不存在就创建
3.show dbs
4.db.collection.insert
5.db.collection.save // save如果指定_id字段,就是更新该_id的数据
6.db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}}, {
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ],
hint: <document|string> // Available starting in MongoDB 4.2
})
7.db.collection.remove
8.db.collection.find()
* {"fieldName":"fieldValue"}
* {"fieldName ":{$lt:50}} // lt; lte; gt; gte; ne
* {$or:[{key1:value1},{key2:value2}]}
* {"key1":{$gt:50}, $or:[{},{}]} // and 和or连用
* {"fieldName":($type : 2)}
9.所有的类型:
1 Double
2 String
3 Object
4 Array
5 Binary data
6 Undefined // 已废弃
7 Object id
8 Boolean
9 Date
10 Null
11 Regular Expression
13 JavaScript
14 Symbol
15 JavaScript(with scope)
16 32-bit integer
17 Timestamp
18 64-bit integer
255 Min key // Query with -1
127 Max key
10.limit和skip
find.limit(10).skip(1) // 查出前10条,跳过第一条
11.sort
find().sort({"fieldName":1}) // 1为升序,-1为降序
12.ensureIndex
db.collection.ensureIndex({fieldName:1}) // 1按升序创建索引,-1按降序创建索引
13.aggregate
db.collection.aggregate([{$group:{showFieldName1:"$fieldName", showFieldName2:{$sum:1}}}])
*聚合的表达式:$sum, $avg, $min, $max, $push, $addToSet, $first, $last //
14.aggregate中的管道操作
aggregate([{first}, {second}])
*$project, $match, $limit, $skip, $unwind, $group, $sort, $geoNear
*project用来指定查询出来的列,默认包含_id // {$project:{_id:0, title:1, author:1}}
15.副本集设置
rs.initiate()
rs.conf()
rs.add()
16.分片
Query Routers
Config Server
Shard Server
17.备份与恢复
mongodump -h dbhost -u uname -p pwd -d dbname -o dbdirectory # 会自动加上dbname的子文件夹
mongorestore -h dbhost -u uname -p pwd -d dbname dbdirectory // 需要定位到dbname的子文件夹
mongodump -h 47.102.153.17 -u uname -p pwd -d tradition -o /Users/taohongyong/Documents/tmp
mongorestore -h 127.0.0.1 -u uname -p pwd -d tradition /Users/taohongyong/Documents/tmp/tradition
18.监控
mongostat.exe
mongotop.exe
----------------------------------------------MongoDB 高级教程--------------------------------------------------
1.关系
两个文档通过 _id 关联
2.引用
{ $ref : collection, $id : _id, $db : db } // db是可选的
3.覆盖索引查询
*即仅查询出索引字段
4.查询分析
explain、hint
*explain分析索引的使用、查询的统计等等、hint用来强制使用指定索引
5.原子操作
findAndModify({query: {}, update: {}}) // 查询并更新
原子操作常用命令:
$set // 指定一个键并更新键值,不存在则创建
$unset // 删除一个键
$inc // 增减某个数字字段
$push // 追加到某个数组字段
$pushAll // 同push,但可以追加多个
$pull // 从数组字段中删除某个值
$addToSet // 追加到数组字段,但是会保证数组的唯一性,不会有重复数据
$pop // 删除数组的第一个或最后一个,-1为第一个,1为最后一个
$rename // 修改字段名
$bit // 位操作
6.高级索引
·索引数字字段 // 为数组字段添加索引时,会同时为该数组中的所有值添加索引
·索引子文档字段 // 为子文档的字段添加索引
7.索引限制
索引是存储在内存中的
索引不能被以下查询使用:正则及非操作符
·集合中索引不能超过64个
·索引名的长度不能超过125个字符
·一个符合索引最多31个字段
8.MapReduce
9.全文检索
db.collection.ensureIndex({fieldName:"text"})
10.正则表达式
11.权限管理
系统内置角色:
Database User roles
read, readWrite,
DatabaseAdministration roles
dbAdmin, dbOwner, userAdmin
Cluster Administration Roles
clusterAdmin, clusterManager, clusterMonitor, hostManager
Backup and REstoration Roles
backup, restore
All-Database Roles
readAnyDatabase, readWriteAnyDatabase, userAdminAnyDatabase, dbAdminAnyDatabase
Superuser Roles
root
readWriteAnyDatabase, dbAdminAnyDatabase, userAdminAnyDatabase, clusterAdmin, restore, backup
1. 用户创建用户
管理员:
use admin
db.createUser({
user: "root",
pwd: "admin123",
customData: {description: "管理员用户"},
roles: ["root"],
})
业务数据库:
use tradition # 不存在该数据时,即为新建
db.createUser({
user: "tradition",
pwd: "admin123",
roles:[
{role:"readWrite", db:"tradition"},
{role: "dbAdmin", db:"tradition"},
]
})
2.开启权限
官方是在mongod启动时添加 --auth参数:
mongod --auth
而brew不行:
brew services start mongodb --auth
需要修改 /usr/local/etc/mongod.conf, 添加以下2行:
security:
authorization: enabled
开启权限后,需要db.auth("name", "pwd")
3.修改用户
db.updateUser("tradition", {pwd: "admin123", roles:[{role: "read", db: "tradition"}]})
4.删除用户
db.dropUser("tradition")
5.开启权限后
db.auth("admin", "admin123")