泰山十八盘:
泰山派绝学,为昔年泰山派名宿所创的剑法
那名宿观泰山三门下十八盘处五步一转,十步一回的地势极为险峻,便将地势融入剑法中
越盘越高,越行越险,因此剑招也是越转越狠辣
数据库操作
命令 | 描述 |
---|---|
use DATA_BASE | 不存在则创建数据库,存在则进入 |
show dbs | 查看所有数据库 |
db | 查看当前所在数据库 |
db.dropDatabase() | 删除当前所在数据库 |
db.version() | 查看数据库版本 |
db.getMongo() | 查看当前数据库连接地址 |
集合操作
创建集合
db.createCollection(name, [capped, size, max])
字段 | 类型 | 描述 |
---|---|---|
name | 字符串 | * 要创建的集合名称 |
capped | 布尔 | (可选)若为 True,创建固定大小的集合,当达到最大值时,它会自动覆盖最早的文档 |
size | 数值 | (可选)为固定集合指定一个最大值,即字节数 |
max | 数值 | (可选)指定固定集合中包含文档的最大数量 |
插入文档时,首先检查固定集合的 size 字段,然后检查 max 字段
在 MongoDB 中,你可以不用显式地创建集合。当你插入文档时,MongoDB 会自动创建集合
查看集合
# 查看所有集合
show collections
show tables
# 查看指定集合状态
db.<Collection_name>.stats()
删除集合
db.<Collection_name>.drop()
文档操作
插入文档
db.COLLECTION_NAME.insert(document) # 插入一条
db.COLLECTION_NAME.insertOne( # 插入一条, 3.2+版本 语法
<document>,
{
writeConcern: <document>
}
)
db.COLLECTION_NAME.insertMany( # 插入多条
[<documeny 1>, <document 2>, ...],
{
writeConcern: <document>,
ordered: <boolean>
}
)
参数 | 描述 |
---|---|
document | 要写入的文档 |
writeConcern | 写入策略,默认为1,要求确认写操作,0不要求 |
ordered | 是否按顺序写入,默认 true,按顺序 |
更新文档
db.COLLECTION_NAME.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
db.COLLECTION_NAME.updateOne(<query>,<update>, ...) # 更新一条数据
db.COLLECTION_NAME.updateMany(<query>,<update>, ...) # 更新多条数据
参数 | 描述 |
---|---|
query | 查询条件 |
update | update对象和一些 更新的操作符 |
upsert | 如果不存在条件查询不到,是否插入数据,默认false |
multi | 默认false,只更新查询到的第一条记录,置为 true 则全部更新 |
操作符 | 描述 |
---|---|
$set | 指定一个键的值,不存在则创建它 |
$unset | 从文档中移除指定的键 |
$inc | 原有基础增加或减少 |
$rename | 重命名字段,不可与已有字段重复,否则会覆盖 |
使用过程中,建议使用 update 代替 insert,数据存在则替换,不存在则插入
删除文档
db.COLLECTION_NAME.drop({
<query>,
{
justOne: <boolean>
}
})
db.COLLECTION_NAME.drop({}) # 删除集合中所有数据
db.COLLECTION_NAME.deleteOne(<query>) # 删除符合条件的一条数据
db.COLLECTION_NAME.deleteMany(<query>) # 删除符合条件的所有数据
参数 | 描述 |
---|---|
query | 根据指定条件删除 |
justOne | 默认false,删除所有匹配的文档,置为 true,只删除第一个匹配的文档 |
查询文档
db.COLLECTION_NAME.find(<query>, [<projection>]) # 查询全部数据
db.COLLECTION_NAME.find(<query>).pretty() # 以格式化方式展示数据
db.COLLECTION_NAME.findOne(<query>) # 查询一条数据
# projection 参数
db.col.find(query, {title: 1, by: 1}) # inclusion模式 指定返回的键,不返回其他键
db.col.find(query, {title: 0, by: 0}) # exclusion模式 指定不返回的键,返回其他键
# inclusion, exclusion 两者不可混用
# _id (主键) 字段默认为 1,可指定 {_id:0} 来不输出 _id 字段值
# _id 不受 inclusion 或 exclusion 模式影响,可随意指定
-
比较运算
操作 格式 等于 $eq
小于 $lt
小等于 $lte
大于 $gt
大等于 $gte
不等于 $ne
db.COLLECTION_NAME.find({"age": {$lte: 18}}) # 年龄小于等于18的
-
逻辑运算
# and db.col.find({ {key: value, key, value} }) db.col.find({ $and: [ {key: value}, {key: value} ] }) # or db.col.find({ $or: [ {key: value}, {key: value} ] }) # in db.col.find({ 'age': {$in: [18, 20]} }) # not # $not 操作符只会影响其它操作符, 不能独立检查字段和文档 # 查询 age 不大于 9 db.col.find({ "age":{$not:{$gt:9}} })
-
limit & skip
# limit() 读取指定数量的数据记录 db.col.find().limit(number) # skip() 跳过指定数量的数据记录 db.col.find().skip(number)
skip 方法只适合小数据量分页,如果数据量过大,效率就会非常低,因为 skip 是一条一条数过去的
-
sort 排序
# 对指定 key 进行排序 # 1 升序 # -1 降序 db.col.find({}).sort({key:1})
limit,skip,sort 放在一起的时候,先执行 sort,然后 skip,最后 limit
-
模糊查询
# 查询包含 xxx db.col.find({key:/xxx/}) # 查询以 xxx 开头 db.col.find({key:/^xxx/}) # 查询以 xxx 结尾 db.col.find({key:/xxx$/}) # 查询忽略大小写 db.col.find({key:/xxx/i}) # 正则查询 db.col.find({key: {$regex: /\d+/}})
-
count 统计
# 集合数据量 db.col.count() # 查询结果的数据量 db.col.find().count()
备份与恢复
-
备份
mongodump -h dbhost -d dbname -o dbdirectory # -h : MongoDB 所在服务器地址, ip+port, 默认为 localhost:27017 # -d : 需要备份的数据库名, 不指定则备份全部数据库 # -o : 备份的数据存放位置 # --collection: 备份指定集合
-
恢复
mongorestore -h <hostname><:port> -d dbname --dir path # -h : MongoDB 所在服务器地址 # -d :需要恢复的数据库实例 # -drop : 恢复的时候,先删除当前数据,然后恢复备份的数据 # --dir : 备份的文件目录
导入与导出
-
mongoexport 导出
# -h 连接的数据库地址 # --port 数据库端口, 默认 27017 # -u 账号 # -p 密码 # -d 指定数据库 # -c 指定集合 # -f 选择导出的字段 例: key1,key2, ... # --type 输出的文件类型, csv 或 json # -o 导出的文件名 # -q 查询条件 # --skip 跳过指定数量的数据 # --limit 读取指定数量的数据 # --sort 执行字段进行排序
-
mongoimport 导入
# -h 连接的数据库地址 # --port 数据库端口, 默认 27017 # -u 用户名 # -p 密码 # -d 指定数据库 # -c 指定集合 # -f 指定导入的字段 # --type 指定导入的文件类型 # --file 导入的文件名称 # --headerline 导入csv文件, 指明第一行为列名, 不需要导入