MongoDB的入门以及简单使用

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);
    }
}

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值