泰山十八盘:
泰山派绝学,为昔年泰山派名宿所创的剑法
那名宿观泰山三门下十八盘处五步一转,十步一回的地势极为险峻,便将地势融入剑法中
越盘越高,越行越险,因此剑招也是越转越狠辣

数据库操作

命令 描述
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文件, 指明第一行为列名, 不需要导入