MongoDB是什么
百度吧~
MongoDB安装Server
ubuntu安装:MongoDB 官网
# 第一步,官网下载tar包。
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.2.tgz
# 解压并移动到习惯的目录
tar -zxvf mongodb-linux-x86_64-ubuntu2004-6.0.2.tgz
mv mongodb-linux-x86_64-ubuntu2004-6.0.2 /usr/local/mongodb
# 设置系统环境变量
sudo vim ~/.bashrc
export PATH=$PATH:/usr/local/mongodb/bin
source ~/.bashrc
# 启动mongo,指定库路径和日志路径
mongod --dbpath=/var/lib/mongodb --logpath=/var/log/mongodb
docker安装:
FROM mongo:latest
VOLUME /data/configdb /data/db
EXPOSE 27017
CMD ["mongo"]
# 通过Dockerfile文件构建镜像
docker build -t my_mongo:latest .
# 创建容器
docker container run -d -p 27017:27017 -v /home/zzp/mine/docker/mongo/data/configdb:/data/configdb -v /home/zzp/mine/docker/mongo/data/db:/data/db --name mongo my_mongo --auth
--auth
: 默认mongo不需要用户密码也是可以登陆的, 只有带上了–auth参数, 表示开启权限认证服务
账户管理
为了保证线上数据库的安全,我们需要给数据库设置权限验证。这里我直接在docker容器里面创建账号,本机安装的原理是一样的,只需要进入Server的Shell后台即可。
docker exec -it mongo mongosh admin
创建一个管理账户,用来管理普通用户:
db.createUser({
user: "root",
pwd: "123456",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})
创建一个普通账户,用来管理数据库:
# 创建一个普通用户,对biancheng库拥有读写权限
db.createUser({
user: "admin001",
pwd: "admin001",
roles: [ { role: "readWrite", db: "biancheng" } ]
})
常用的role值记录:
- 数据库用户角色:read、readWrite
- 数据库管理角色:dbAdmin、dbOwner、userAdmin
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
- 备份恢复角色:backup、restore
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root
role值相应的含义:
- Read:允许用户读取指定数据库
- readWrite:允许用户读写指定数据库
- dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
- userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
- clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
- readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
- readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
- userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
- dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限
- root:只在admin数据库中可用。超级账号,超级权限
接下来尝试客户端带上密码连接:
# 客户端连接
mongo -u root -p 123456 --authenticationDatabase admin
# 查看是否连接成功,一般能看到所有数据库即代表成功
show dbs
删除一个用户:
db.dropUser("admin001")
修改一个用户的密码:
db.changeUserPassword('admin001','12345678');
基础操作
操作库:
# 优雅关闭server
mongod --shutdown --dbpath=/var/lib/mongodb
# 查看所有数据库
show dbs
# 进入数据库数据库,不存在则创建
use test
# 删除数据库
db.dropDatabase()
操作集合:
# 创建集合
db.createCollection(name, options)
注意点:
- 如果是空的数据表,在
show dbs
的时候是不会展示的,必须向该数据库写入数据
Java连接MongoDB
maven依赖
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.12.11</version>
</dependency>
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
public class MongoDbApplication {
public static void main(String[] args) {
// 创建 MongoDB 连接
MongoClientURI mongoClientURI = new MongoClientURI("mongodb://admin:123456@127.0.0.1:27017/admin");
MongoClient mongo = new MongoClient( mongoClientURI);
// 访问数据库
MongoDatabase database = mongo.getDatabase("biancheng");
// 获取集合
MongoCollection<Document> website = database.getCollection("website");
Document document = new Document()
.append("title", "PHP")
.append("description", "世界上最好的语言!")
.append("url", "https://www.php.net/manual/zh/index.php");
website.insertOne(document);
FindIterable<Document> iterableDoc = website.find();
MongoCursor<Document> iterator = iterableDoc.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
System.out.println("文档创建成功");
}
}