安装
使用docker安装mongodb
// 搜素镜像
docker search mongo
// 获取镜像
docker pull mongo
// 运行container
docker run -d -p 27017:27017 -v mongo_configdb:/data/configdb -v mongo_db:/data/db --name mongo docker.io/mongo --auth
其中--auth表示开启权限认证,mongo默认是不启用权限认证的,不开启的后果可以查看这篇文章
使用mongo进入container
docker exec -it mongo mongo
呼出mongo命令交互
安装可视化工具
概念
db——数据库
mongodb单个实例可以由多个互相独立的数据库组成,每一个都有自己的集合和权限,可以使用use [dbName] 创建一个db
collections——集合
集合类似与sql中的表,是一类数组的集合,可以使用
db.[collectionsName].insert({name:"document"})
往collectionsName这个集合插入一条数据。 值得注意的是:
- mongo的集合比起表更灵活,没有限制数据的格式等,可以在表中插入不同格式和类型的数据。交给开发者自行维护,可以通过Mongoose来约束类型等。
document——文档
文档即一条数据,文档组成集合。
使用
用户及权限
创建超级用户
use admin // 使用admin数据库
db.createUser({"user":"root","pwd":"xxxtech","roles":["root"]}) // 创建root权限的用户
outPut: Successfully added user: { "user" : "root", "roles" : [ "root" ] }
创建普通用户
运行
db.createUser({
"user": "test2", // 用户
"pwd": "test2", // 密码
"roles": [{
role: "readWrite", // 角色
db: 'test' // 数据库
}]
})
output:
{
"user": "test2",
"roles": [{
"role": "readWrite",
"db": "test"
}]
}
创建了一个能读和写test数据库的用户test2
用户权限获取
db.auth("licb","pwd")
值得一提的是,如果比如你是root用户,那么你只能在admin数据库下先认证用户权限,才可以去别的数据库进行操作,不能直接在如test数据库操作
常用命令
杂项
查看所有数据库
show dbs
查看当前数据库下的所有集合名称
db.getCollectionNames()
show collections
查看当前使用的数据库
db.getName()
查看帮助
增
增加一条文档
insertOne 或者 insert
db.[collectionsName].insertOne({
name:"li",
age:"23",
job:"Front-end Developer"
})
增加多条
db.[collectionsName].insertMany([
{
love: "liu"
},
{
love: "girl"
}
]);
查找数据
简单查找
db.[collectionsName].find({
age:23
})
相当于
select * from [collectionsName] where age=23
意思是找出集合中 age 为 23(数值类型)的所有文档,age为 "23"的不会显示
列筛选
忽略age以外的列
db.[collectionsName].find({},{"age":1})
相当于
select age from [collectionsName]
忽略age
db.[collectionsName].find({},{"age":0})
相当于
select age from [collectionsName]
查询运算符查询
$in运算符
$in表示name为值之一
db.collecgtions.find({
name: {
$in: ["li", "liu"]
}
})
相当于
SELECT * FROM collecgtions WHERE name in ("li", "liu")
其他运算符
修改
更新一条数据
db.collection.updateOne({age:30},{$set:{age:34}})
意思是:把age为30岁的一条数据中的 age字段更新为 34
更新多条文档
db.collection.updateMany({age:30},{$set:{age:34}})
删除
删除集合
db.collection.drop()
删除一条文档
db.collection.deleteOne({age:30})
删除age为30的一条文档
删除多条文档
db.collection.deleteMany({age:30})
outPut:
{ "acknowledged" : true, "deletedCount" : 4 }