1.MongoDB介绍
MongoDB是一个基于分布式文件存储的数据库,属于非关系型数据库(NoSQL),基于c++编写。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储非常复杂的数据。
它的特点是高性能,易部署,易使用,适合存入数据量大、写入操作频繁、数据价值不高的数据。
1.1MongoDB体系结构
MongoDB的体系结构是一种逻辑结构,主要由:文档(document),集合(collextion),数据库(database)三部分组成。
1.文档(document)相当于关系数据库中表中的一行数据。
2.集合(collection)相当于关系数据库中的表
3.多个集合逻辑上组合在一起就是数据库
4.一个MongoDB实例支持多个数据库
数据库 | 数据库 |
集合(collection) | 表(table) |
文档(document) | 行(raw) |
2.在docker中安装MongoDB
掌握在docker中安装Mongo的方法和一些基础的Mongo操作语句
3.mongodb-driver的使用
1.添加依赖
2.代码编写
抽取出mongoclient和collection
//客户端
private MongoClient mongoClient;
//集合
private MongoCollection<Document> collection;
@Before
public void init() {
//创建Mongo客户端
mongoClient = new MongoClient("192.168.65.133");
//选择数据库 use test
MongoDatabase database = mongoClient.getDatabase("test");
//选择集合 db.comment
collection = database.getCollection("comment");
}
进行增删改查,例:根据条件查询
//db.comment.find({"_id":"1"})
//根据条件查询
@Test
public void test2() {
//封装查询条件
BasicDBObject bson = new BasicDBObject("_id", "1");
//查询所有 db.comment.find()
FindIterable<Document> documents = collection.find(bson);
//遍历打印
//{ "_id" : "4", "content" : "坚持就是胜 利", "userid" : "1014", "thumbup" : 1223 }
for (Document document : documents) {
System.out.println(document);
}
}
释放资源
@After
public void after() {
//释放资源
mongoClient.close();
}
4.实现文章评论功能
SpringDataMongoDB是操作MongoDB的持久化层框架,封装了底层的mongodb-driver,本功能采用SpringDataMongoDB进行开发
1.添加依赖和配置文件
2.编写实体类和CommentRepository,CommentRepository注意不要和mybatis的接口放在同一个包下
public interface CommentRepository extends MongoRepository<Comment,String> {
//根据文章id查询评论
List<Comment> findByArticleid(String articleId);
}
3.操作mongodb进行增删改查
5.本章的陌生知识点
使用SpringDataMongoDB操作mongo的方法,例:点赞功能
public void thumbup(String commentId) {
//封装修改的条件
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(commentId));
//封装修改的数值
Update update = new Update();
//使用inc列值增长
update.inc("thumbup", 1);
mongoTemplate.updateFirst(query, update, "comment");
}
可将点赞信息存入redis中查询快速方便,熟悉redisTemplate的用法
//PUT//comment/thumbup/{commentId}/根据评论id增加点赞数
@RequestMapping(value = "thumbup/{commentId}", method = RequestMethod.PUT)
public Result thumbup(@PathVariable String commentId) {
//添加禁止重复点赞功能
//从redis查询信息
String userid = "123";
Integer flag = (Integer) redisTemplate.opsForValue().get("thumbup" + "_" + userid + "_" + commentId);
//已经点赞,返回结果
if (flag == 1) {
commentService.cancelThumbup(commentId);
redisTemplate.opsForValue().set("thumbup" + "_" + userid + "_" + commentId, 0);
return new Result(StatusCode.OK, true, "取消点赞");
}
//flag为空则没有点赞,可以点赞
else {
commentService.thumbup(commentId);
redisTemplate.opsForValue().set("thumbup" + "_" + userid + "_" + commentId, 1);
return new Result(StatusCode.OK, true, "点赞成功");
}
}