十次方项目总结-2-MongoDB

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值