MongoDB数据库简介及整合Spring Boot

MongoDB数据库简介

1、简介

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

它支持的数据结构非常松散,是一种类似JSON的格式叫BSON(“二进制的JSON”),所以它既可以存储比较复杂的数据类型,又相当的灵活。

2、业务应用场景

传统的关系型数据库,在数据库操作的“三高”需求以及对应的Web2.0的网站需求面前,显得力不从心。

三高:

  • 对数据库高并发读写
  • 对海量数据的高效率存储和访问
  • 对数据库的高可扩展和高可用性的需求

应用场景的共同特点:

  1. 数据量大
  2. 读写操作频繁
  3. 价值较低的数据,对事务要求不高

3、概念解析

与关系数据库概念对比:

SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
嵌入文档MongoDB通过嵌入式文档来替代多表连接(效率更高)
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

4、常用命令

选择切换数据库:

use articledb 

插入数据:

db.comment.insert({bson数据}) 

查询所有数据:

db.comment.find()

条件查询数据:

db.comment.find({条件}) 

查询符合条件的第一条记录:

db.comment.findOne({条件}) 

查询符合条件的前几条记录:

db.comment.find({条件}).limit(条数)

查询符合条件的跳过的记录:

db.comment.find({条件}).skip(条数) 

修改数据:

db.comment.update({条件},{修改后的数据}) 
或
db.comment.update({条件},{$set:{要修改部分的字段:数据}) 

修改数据并自增某字段值:

db.comment.update({条件},{$inc:{自增的字段:步进值}}) 

删除数据:

db.comment.remove({条件}) 

统计查询:

db.comment.count({条件}) 

模糊查询:

db.comment.find({字段名:/正则表达式/}) 

条件比较运算:

db.comment.find({字段名:{$gt:}}) 

包含查询:

db.comment.find({字段名:{$in:[1,值2]}})
或
db.comment.find({字段名:{$nin:[1,值2]}}) 

条件连接查询:

db.comment.find({$and:[{条件1},{条件2}]})
或
db.comment.find({$or:[{条件1},{条件2}]})

5、索引

5.1单字段索引

MongoDB支持在文档的单个字段上创建用户定义的升序/降序索引。对单个字段索引和排序操作,索引键的排序顺序(升或降序)并不重要,MongoDB可以在任何方向上遍历索引。

5.2复合索引

支持多个字段的用户定义索引。复合索引中列出的字段顺序具有重要意义。会按照列出字段顺序保存。如复合索引:{userId:1,score:-1},则索引首先按userId正序排列,然后在每个userId的值内,再按score倒叙排列。

5.3其他索引

地理空间索引、文本索引、哈希索引

创建索引:

db.collection.createIndex(keys, options)

更多命令访问菜鸟教程:https://runoob.com/mongodb/mongodb-tutorial.html

6、整合Spring Boot

pom.xml添加依赖:

<!--mongodb数据库-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

yml文件配置:

spring:
  data:
    mongodb:
      uri: mongodb://localhost:27017/articledb    #本机的没有账号和密码(IP:端口/数据库名称)

实体类:

package com.esoon.hello.pojo;

import lombok.Data;

//数据库的实体类,实体类的名字要和数据库Collection名称一样,或者在实体类上加@Document(collection = "数据库集合名称")注解
@Data
public class MongoComment {
    private String id;
    private String name;
}

controller层:

package com.esoon.hello.controller;

import com.esoon.hello.dao.MongoTestDao;
import com.esoon.hello.pojo.MongoComment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;
import java.util.UUID;

@RestController
public class MongoTestController {

    @Resource
    private MongoTestDao mongoTestDao;

    //插入数据
    @GetMapping(value = "saveTest")
    public void saveTest() {
        MongoComment mongoComment = new MongoComment();
        mongoComment.setId(UUID.randomUUID().toString().replace("-", ""));
        mongoComment.setName("jack");
        mongoTestDao.saveTest(mongoComment);
    }

    //查询全部
    @GetMapping(value = "findAll")
    public List<MongoComment> findAll() {
        List<MongoComment> list = mongoTestDao.findAll();
        list.forEach(s-> System.out.println(s.getId()+s.getName()));
        return list;
    }
    
    //按name查询
    @GetMapping(value = "/findByName/{name}")
    public List<MongoComment> findByName(@PathVariable("name") String name) {
        List<MongoComment> list = mongoTestDao.findByName(name);
        return list;
    }

    //update更新
    @GetMapping(value = "/updateByName/{name}")
    public List<MongoComment> updateByName(@PathVariable("name") String name) {
        //更新后返回查询所有
        List<MongoComment> list = mongoTestDao.updateByName(name);
        return list;
    }

    //删除
    @GetMapping(value = "/deleteById/{id}")
    public List<MongoComment> deleteById(@PathVariable("id") String id) {
        //删除一个后返回查询所有
        List<MongoComment> list = mongoTestDao.deleteById(id);
        return list;
    }
}

调用数据库dao:

package com.esoon.hello.dao;

import com.esoon.hello.pojo.MongoComment;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.List;
/**
 * 备注:操作mongodb数据库方法mongoTemplate都封装好了,不用像mybatis在xml写sql,调用所需方法即可
 */
@Component
public class MongoTestDao {

    @Resource
    private MongoTemplate mongoTemplate;

    public void saveTest(MongoComment mongoComment) {
        mongoTemplate.save(mongoComment);
    }

    public List<MongoComment> findAll() {
        Query query = new Query();
        List<MongoComment> list = mongoTemplate.findAll(MongoComment.class);
        return list;
    }
    
    public List<MongoComment> findByName(String name) {
        Query query = new Query(Criteria.where("name").is(name));
        List<MongoComment> list = mongoTemplate.find(query, MongoComment.class);
        return list;
    }

    public List<MongoComment> updateByName(String name) {
        Query query = new Query(Criteria.where("name").is(name));
        Update update = new Update().set("name", "jjjjjjack");          //_id是不能更新的
        mongoTemplate.updateFirst(query, update, MongoComment.class);       //updateFirst更新查询结果集中的第一条
        return findAll();
    }

    public List<MongoComment> deleteById(String id) {
        Query query = new Query(Criteria.where("id").is(id));
        mongoTemplate.remove(query, MongoComment.class);
        return findAll();
    }
}

MongoDB Compass查询效果:
在这里插入图片描述
网页查询效果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值