一、首先使用docker安装mongodb
1.创建挂载目录:
docker volume create mongo_data_db; docker volume create mongo_data_configdb;
2,拉取镜像
docker pull mongo:4.0.3
3.创建容器
docker create --name mongodb -p 27017:27017 -v /data/mongodb:/data/db mongo:4.0.3
启动容器
docker start mongodb
进入容器
docker exec -it mongodb /bin/bash
使用docker ps查看容器进程
4.初始化管理员账号(进入容器)
# docker exec -it <容器名><数据库名> docker exec -it mymongo mongo admin
创建最高权限用户
db.createUser({ user: 'admin', pwd: 'adminpwd', roles: [ { role: "root", db: "admin" } ] });
user:用户名admin
- pwd:密码adminpwd
- role:角色root
- db:授权使用admin库
防火墙开启27017端口,阿里云服务器,需要到阿里云管理页面添加27017端口的对外开放规则
firewall-cmd --zone=public --add-port=27017/tcp --permanent firewall-cmd --reload firewall-cmd --query-port=27017/tcp
然后navicat premium中连接查看
二,整合spring data mongodb操作数据
1.集成spring data mongodb,在项目Pom文件中引入依赖
org.springframework.boot spring-boot-starter-data-mongodb
2.application.yml配置连接
org.springframework.boot.autoconfigure.mongo.MongoProperties 负责加载MonoDB配置
27017是MongoDB默认的端口,test是内置的数据库。如果MongoDB使用了--auth选项启动,则需要使用用户登录,则使用如下方式链接
spring:
data:
mongodb:
uri: mongodb://test:123456@192.168.161.3:27017/testdb
上边是单机配置,如果是集群参考
单机模式:mongodb://name:pwd@ip:port/database
集群模式:mongodb://name:pwd@ip1:port1,ip2:port2/database
在项目入口启动类上面加一个注解@EnableMongoAuditing。开启Mongodb审计功能.
接下来就可以写crud了
首先创建实体类
@Document(collection="article")//集合名
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Article implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private String id;
@Indexed
private String author;
private String title;
@Field("msgContent")
private String content;
@CreatedDate
private Date createTime;
private List reader;
}
这里注意:
- 一定要实现Serializable 接口,否则在序列化的时候会报错。
- @Document(collection=“article”) 表示:操作的集合为:article。
- 另外,针对@CreatedDate注解,也和jpa用法一样,创建时会自动赋值,需要在启动类中添加@EnableMongoAuditing注解使其生效!
- 可使用@Field注解,可指定存储的键值名称,默认就是类字段名。如设置@Field("msgContent")
- @Id主键,不可重复,自带索引,可以在定义的列名上标注,需要自己生成并维护不重复的约束。如果自己不设置@Id主键,mongo会自动生成一个唯一主键,并且插入时效率远高于自己设置主键。
- @Indexed声明该字段需要加索引,加索引后以该字段为条件检索将大大提高速度。
唯一索引的话是@Indexed(unique = true)。
Dao接口可以按照自己需要集成Repository,CrudRepository,PagingAndSortingRepository,或者继承功能最全的 MongoRepository均可,如下
public interface ArticleDao extends MongoRepository {
//支持关键字查询,和JPA的用法一样
Article findByAuthor(String author);
Page findAll(Pageable pageable);
}
在Controller里,可以自动注册ArticleDao
@Autowired
private Articledao;
@GetMapping("/all")
public List page(int page,int size){
Pageable pageable = PageRequest.of(page,size);
Page result = dao.findAll(pageable);
return result.getContent();
}
@GetMapping("/queryOne")
public Article queryDetail(String id){
Optional optional = dao.findById(id);
return optional.get();
}
今年五一,拿个博客五一勋章



