1. MongoDB简介:
它是一种开源,高性能,无模式的文档型数据库,是一种NoSQL数据库产品,是最像关系型数据库(MySQL)的非关系数据库。
它的数据存储量较大,对数据读写的响应速度要求比较高,数据具有结构性,数据存储形式类似文档类型,如果某些数据安全性要求不高,可以接受一定范围内的误差,推荐使用。
2. 体系结构与术语:
3. MongoDB的安装与配置
3.1 Linux:
如无容器,则创建容器:
docker run -di --name mongo -p 27017:27017 -v ~/data/mongodata:/data mongo
如有容器,则启动容器:
docker start mongo
3.2 Windows:
去MongoDB官网下Windows安装包,
在cmd 管理员中启动和关闭 MongoDB 服务
启动 MongoDB 命令为:
net start MongoDB
关闭MongoDB 命令为:
net stop MongoDB
3.3 可视化工具:
studio3t是mongodb优秀的客户端工具。官方地址在The Ultimate Client, IDE and GUI for MongoDB | Studio 3T
4. MongoDB快速入门的案例:
4.1 配置yml:
以本地安装的MongoDB为例
spring:
data:
mongodb:
host: 127.0.0.1
port: 27017
database: leadnews-comment
4.2 实体类准备
实体类准备,添加注解@Document
与mongodb中的集合对应上
package com.itheima.mongo.pojo;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.math.BigDecimal;
import java.util.Date;
/**
* APP评论信息
*/
@Data
@Document("ap_comment")
public class ApComment {
/**
* id
*/
private String id;
/**
* 用户ID
*/
private Integer userId;
/**
* 用户昵称
*/
private String userName;
/**
* 文章id或动态id
*/
private Long objectId;
/**
* 频道ID
*/
private Integer channelId;
/**
* 评论内容类型
* 0 文章
* 1 动态
*/
private Integer type;
/**
* 评论内容
*/
private String content;
/**
* 作者头像
*/
private String image;
/**
* 点赞数
*/
private Integer likes;
/**
* 回复数
*/
private Integer reply;
/**
* 文章标记
* 0 普通评论
* 1 热点评论
* 2 推荐评论
* 3 置顶评论
* 4 精品评论
* 5 大V 评论
*/
private Integer flag;
/**
* 经度
*/
private BigDecimal longitude;
/**
* 维度
*/
private BigDecimal latitude;
/**
* 地理位置
*/
private String address;
/**
* 评论排列序号
*/
private Integer ord;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新时间
*/
private Date updatedTime;
}
4.3 基本的增删改查
添加单元测试
package com.itheima.mongo.test;
import com.itheima.mongo.pojo.ApComment;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Date;
import java.util.List;
@SpringBootTest
@RunWith(SpringRunner.class)
public class MongoTest {
@Autowired
private MongoTemplate mongoTemplate;
/**
* 测试添加文档
*/
@Test
public void testAddDocument(){
for (int i = 1; i <= 10; i++) {
ApComment apComment = new ApComment();
apComment.setUserId(i);//评论的用户id
apComment.setUserName("测试用户"+i);//测试用户名
apComment.setType(0);//类型-0表示文章
apComment.setObjectId(Long.valueOf(10+i));//文章id
apComment.setContent("测试内容"+i);
apComment.setLikes(100+i);//点赞数量
apComment.setCreatedTime(new Date());//创建时间
apComment.setUpdatedTime(new Date());//更新时间
mongoTemplate.save(apComment);
}
}
/**
* 测试查询文档
*/
@Test
public void testGetDocument(){
//查询一条数据:根据主键ID查询
ApComment apComment = mongoTemplate.findById("64473c4342e2e400d613830d", ApComment.class);
System.out.println(apComment);
System.out.println("=======================");
//查询一条数据:根据条件查询
apComment = mongoTemplate.findOne(Query.query(Criteria.where("userName").is("测试用户8").and("likes").is(108)), ApComment.class);
System.out.println(apComment);
System.out.println("=======================");
//查询列表数据:查询全部数据
List<ApComment> apCommentList = mongoTemplate.findAll(ApComment.class);
apCommentList.forEach(System.out::println);
System.out.println("=======================");
//查询列表数据:根据条件查询
apCommentList = mongoTemplate.find(Query.query(Criteria.where("likes").gt(105)
.and("type").is(0))
.with(Sort.by(Sort.Direction.DESC, "likes"))
.limit(3), ApComment.class);
apCommentList.forEach(System.out::println);
}
/**
* 测试更新文档
*/
@Test
public void testUpdateDocument(){
//更新方式1:根据id更新
// ApComment apComment = mongoTemplate.findById("64473c4342e2e400d613830e", ApComment.class);
// apComment.setUserName("测试用户666");
// mongoTemplate.save(apComment);
//更新方式2:根据条件更新(参数1:更新条件 参数2:更新的域和值 参数3:POJO类型)
// mongoTemplate.updateFirst(Query.query(Criteria.where("userName").is("测试用户8")),
// new Update().set("likes",111)
// , ApComment.class);
//更新方式3:根据条件更新-线程安全的更新(参数1:更新条件 参数2:更新的域和值 参数3:POJO类型)
mongoTemplate.findAndModify(Query.query(Criteria.where("userName").is("测试用户8")),
new Update().inc("likes",-1)
, ApComment.class);
}
/**
* 测试删除文档
*/
@Test
public void testDeleteDocument(){
//删除方式1:根据ID删除
// ApComment apComment = mongoTemplate.findById("64473c4342e2e400d613830e", ApComment.class);
// mongoTemplate.remove(apComment);
//删除方式2:根据条件删除
mongoTemplate.remove( Query.query(Criteria.where("userName").is("测试用户8")), ApComment.class);
}
}