【博学谷学习记录】超强总结,用心分享|架构师-前置知识-mongodb基本使用

mongodb是非关系型、文档数据库,数据形式Bson

一、Nosql简介

1.1 为何要nosql?

myql扩容时配置要求高、成本高
nosql自动水平扩容操作简单

1.2 优点:

高可扩展性
分布式计算
低成本
架构的灵活性,半结构化数据
没有复杂的关系

1.3 缺点:

没有标准化
有限的查询功能(到目前为止)
最终一致是不直观的程序

二、mongoDB基础

2.1 存储结构

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于
JSON 对象。字段值可以包含其他文档,数组及文档数组。
在这里插入图片描述

2.2 特点

非关系型数据库,基于 Document data model (文档数据模型)
MongoDB以 BSON (BinaryJSON) 格式存储数据,类似于 JSON 数据形式
关系型数据库使用 table (tables of rows)形式存储数据,而MongoDB使用 collections
(collections of documents)
支持 临时查询( ad hoc queries ): 系统不用提前定义可以接收的查询类型
索引通过 B-tree 数据结构, 3.2版本的WiredTiger 支持 log-structured merge-trees(LSM)
支持索引和次级索引( secondary indexes ): 次级索引是指文档或row有一个 主键( primary key )作为索引,同时允许文档或row内部还拥有一个索引,提升查询的效率,这也是MongoDB比
较大的一个特点

2.3 和传统数据库对比

在mongodb中基本的概念是文档、集合、
数据库
在这里插入图片描述

三、springboot整合mongodb

3.1 引入坐标

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

3.2 配置

server:
  port: 8080
spring:
  application:
    name: spring-boot-test
  data:
    mongodb:
      database: test
      host: 192.168.10.30
      port: 27017

3.3 定义实体类

Blog@Document("blog")
public class Blog {
    @Id
    private String id;
    private String title;
    private String by;
    private String url;
    private List<String> tags;
    private int likes;
    setter getter ....
}

DAO类
@Component
public class BlogDao {
    @Autowired
    private MongoTemplate mongoTemplate;

    public void insert(Blog blog) {
        mongoTemplate.insert(blog);
    }

    public Blog findByID(String id) {
        return mongoTemplate.findById(id, Blog.class);
    }


    public void deleteByID(String id) {
        mongoTemplate.remove(Query.query(Criteria.where("_id").is(id)), Blog.class);
    }

    public List<Blog> find(Blog blog) {
        if (null == blog) {
            return null;
        }
        Criteria criteria = getFilter(blog);
        return mongoTemplate.find(Query.query(criteria), Blog.class);

    }

    public Criteria getFilter(Blog blog) {
        Criteria criteria = new Criteria();
        if (!StringUtils.isEmpty(blog.getTitle())) {
            criteria.andOperator(Criteria.where("title").is(blog.getUrl()));
        }
        if (!StringUtils.isEmpty(blog.getBy())) {
            criteria.andOperator(Criteria.where("by").is(blog.getBy()));
        }
        if (!StringUtils.isEmpty(blog.getLikes())) {
            criteria.andOperator(Criteria.where("likes").is(blog.getLikes()));
        }
        if (null != blog.getTags() && !blog.getTags().isEmpty()) {
            criteria.andOperator(Criteria.where("tags").in(blog.getTags()));
        }

        return criteria;
    }

}

3.4 controller

@RestController
@RequestMapping("/blog")
public class WebController {
    @Resource
    private BlogDao blogDao;

    @RequestMapping("/{id}")
    @ResponseBody
    public String getBlogInfo(@PathVariable("id") String id) {
        Blog blog = blogDao.findByID(id);
        if (null == blog) {
            return "访问的数据不存在";
        }
        return JSON.toJSONString(blog);
    }

    @RequestMapping("/add")
    @ResponseBody
    public String addBlog(@RequestBody Blog blog) {
        blogDao.insert(blog);
        return JSON.toJSONString(blog);
    }

    public void batchAdd(){

    }
}

测试结果
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值