- mongod 启动服务
- db 查看当前操作那个一个数据库
- show dbs 查看数据数据列表(一共有几个数据库,备注: 如果数据库为空,不出现在列表中)
- use test : 切换到test数据库,如果不存在,则创建一个test库
- db.students.insert() 向当前数据库的students集合中插入一个文档(没有重新创建,在插入)
- show collections 展示当前数据库中所有的集合
用户创建及用户权限
创建用户
db.createUser(
{
user:"admin",
pwd:"123456",
roles:[{role:'userAdminAnyDatabase',db:"admin"}]
}
)
用户认证
use admin
db.auth("admin","123456")
内置权限说明
- 数据库用户角色
- read 只读权限
- readWrite 读写权限
- 数据库管理角色
- dbAdmin 在当前db中执行管理操作的权限
- dbOwner 在当前db中执行任意操作
- userADmin 在当前db中管理user的权限
- 备份和还原角色
- backup
- restore
- 夸库角色
- clusterAdmin 管理机器的最高权限
- clusterManager 管理和监控集群的权限
- clusterMonitor 监控集群的权限
- hostManager 管理server
- 超级权限
- root 超级用户
数据库的备份与恢复(docker环境)
备份
// 查看容器名称和容器code
docker ps | grep mongotest
// 备份
docker exec -it mongotest_mongo_1 mongodump -h localhost -u root -p exaple -o /tmp/test
/*
* -h 需要连接数据库的地址
* -u 是数据库用户
* -p 用户密码
* -o 表示备份后的位置
* -d 指定备份的数据库,如果不填将备份用户下面的所有库
*/
// 将docker容器内部的文件拷贝出来
docker cp 容器code:/tmp/test /tmp/test
恢复
docker exec -it mongotest_mongo_1 mongoerstore -h localhost -u root -p example --dir /tmp/test
/*
* --dir 表示从那个备份路径中恢复
*/
---
增
db.集合名.insert(文档对象)
db.集合名.insertOne(文档对象)
db.集合名.insertMany([文档对象,文档对象])
查
- db.集合.find(查询条件[,投影])
- 举例
- db.students.find({age:18}) 查找年龄为18的所有信息
- 举例
- db.students.find({age:18,name:’jack’}) 查找年龄为18 且名字为Jack的学生
- 举例
- 常规操作符
- < , <= , > , >= , !== 对应 $lt , $lte , $gt , $gte , $ne
- 举例
- db.集合名.find({age:{$get:20}}) 年龄是大于等于20的
- 举例
- 逻辑或; 使用 $in 或 $or
- 查找年龄为18或20的学生
- 举例
- db.stydents.find({age:{$in:[18,20]}})
- 举例
- db.students.find({$or:[{age:18},{age:20}]})
- 举例
- 查找年龄为18或20的学生
- 逻辑非: $nin
- 正则匹配
- 举例
- db.students.find({name:/^T/})
- 举例
- $where 能写函数
- < , <= , > , >= , !== 对应 $lt , $lte , $gt , $gte , $ne
db.students.find({$where:function(){
return this.name === "zhangsan" && this.age === 18
}})
补充:
- 投影
- 过滤掉不想要的数据,只保留想要的展示的数据
- 举例
- db.studentents.find({},{_id:0,name:0}), 过滤掉 id 和 name
- 举例
- db.students.find({},{age:1}) 只保留age
- db.集合名.findOne(查询条件[,投影]), 默认只要找到一个
更新
db.集合名.update(查询条件,更新的内容[,配置对象])
// 如下写法会将更新内容替换掉整个文档对象,但_id不受影响
db.students.update({name:'zhangsan'},{age:19})
// 使用 $set 修改指定内容,其他数据不变,不过只能匹配一个 zhangsan
db.students.update({name:"zhangsan"},{age:19})
// 修改多个文档对象,匹配多个zhangsan ,把所有zhangsan的年龄都替换为19
db.students.update({name:"zhangsan"},{$set:{age:19}})
//修改多个文档对象,匹配多个zahngsan的年龄都替换为19
db.students.update({name:"zhangsan"},{$set:{age:19}},{multi:true})
补充
db.集合名.updateOne(查询条件,要更新的内容[,配置对象])
db.集合名.updateMany(查询条件,更新的内容[,配置对象])
删除
/*
db.集合名.remove(查询条件)
// 删除所有年龄小于等于19的学生
*/
db.students.remove({age:{$lte:19}})
db.students.remove({age:20})