欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

十次方项目总结-2-MongoDB

程序员文章站 2024-01-17 13:43:22
1.MongoDB介绍MongoDB是一个基于分布式文件存储的数据库,属于非关系型数据库(NoSQL),基于c++编写。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储非常复杂的数据。它的特点是高性能,易部署,易使用,适合存入数据量大、写入操作频繁、数据价值不高的数据。1.1MongoDB体系结构MongoDB的体系结构是一种逻辑结构,主要由:文档(document),集合(collextion),数据库(database)三部分组成。1.文档(document)相当...

1.MongoDB介绍

MongoDB是一个基于分布式文件存储的数据库,属于非关系型数据库(NoSQL),基于c++编写。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储非常复杂的数据。

它的特点是高性能,易部署,易使用,适合存入数据量大、写入操作频繁、数据价值不高的数据。

1.1MongoDB体系结构

MongoDB的体系结构是一种逻辑结构,主要由:文档(document),集合(collextion),数据库(database)三部分组成。

1.文档(document)相当于关系数据库中表中的一行数据。

2.集合(collection)相当于关系数据库中的表

3.多个集合逻辑上组合在一起就是数据库

4.一个MongoDB实例支持多个数据库

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, "点赞成功");
        }
    }

 

本文地址:https://blog.csdn.net/flashdog8/article/details/108985080

相关标签: JAVA