• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

mongoDB-学习笔记

武飞扬头像
I.GQ.I
帮助1

前言

  • 为什么使用NoSQL :

    1、对数据库高并发读写。

    2、对海量数据的高效率存储和访问。

    3、对数据库的高可扩展性和高可用性。

  • 弱点:

    1、数据库事务一致性需求

    2、数据库的写实时性和读实时性需求

    3、对复杂的SQL查询,特别是多表关联查询的需求

安装

  • #拉取镜像

    • docker pull mongo:latest
  • 创建和启动容器

    • docker run -d --restart=always -p 27017:27017 --name mymongo -v /data/db:/data/db -d mongo
  • 进入容器

    • docker exec -it mymongo /bin/bash
  • 使用MongoDB客户端进行操作

    • mongo

命令

  • show dbs #查询所有的数据库

。。。

笔记连接

一些命令和其他内容:https://www.aliyundrive.com/s/LvFJDu1ddTD

整合spring

MongoTemplate

MongoRepository

spring-data-mongodb提供了MongoTemplate与MongoRepository两种方式访问mongodb,MongoRepository操作简单,MongoTemplate操作灵活,我们在项目中可以灵活适用这两种方式操作mongodb,MongoRepository的缺点是不够灵活,MongoTemplate正好可以弥补不足。

引入相关依赖

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

简单的配置

spring.data.mongodb.uri=mongodb://192.168.177.130:27017/test

实体类

@Document("User")//对MongoDB中的某个集合或者文档进行操作
public class User {
    @Id//由MongoDB生成
    private String id;
    private String name;
    private Integer age;
    private String email;
    private String createDate;
}

MongoTemplate

测试类

简单查询

@Autowired
private MongoTemplate mongoTemplate;
@Test
void contextLoads() {
    User user = new User();
    user.setName("test");
    user.setAge(18);
    user.setEmail("123@123.com");
    User insert = mongoTemplate.insert(user);
    System.out.println(insert);
}
----测试结果:
    ---User(id=61ae0caa5dfce0015d449fa4, name=test, age=18, email=123@123.com, createDate=null)
  
/**
* 查询所有
*/
@Test
public void TestFindAll(){
List<User> all = mongoTemplate.findAll(User.class);
System.out.println(all);
}

/**
* 根据id查询
*/
@Test
public void testFindById(){
User byId = mongoTemplate.findById("61ae0caa5dfce0015d449fa4", User.class);
System.out.println(byId);
}

学新通

根据条件查询

/**
 * 根据条件查询
 */
@Test
public void testQuery(){
    //查询 name = test and age = 18
    Query query = new Query(Criteria.where("name").is("test").and("age").is(18));
    List<User> users = mongoTemplate.find(query, User.class);
    System.out.println(users);
}

模糊查询

/**
 * 模糊查询
 */
@Test
public void findLick(){
    String name = "est";//name中只要包含est即可
    String regex = String.format("%s%s%s","^.*",name,".*$");
    Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);//Pattern.CASE_INSENSITIVE不区分分大小写,可以不添加该参数
    Query query = new Query(Criteria.where("name").regex(pattern));//regex 正则表达式
    List<User> users = mongoTemplate.find(query, User.class);
    System.out.println(users);
}

分页查询

/**
 * 分页查询
 */
@Test
public void pageLimit(){
    String name = "est";
    String regex = String.format("%s%s%s","^.*",name,".*$");

    Pattern pattern = Pattern.compile(regex);
    Query query = new Query(Criteria.where("name").regex(pattern));
    //查询记录数
    long count = mongoTemplate.count(query, User.class);
    System.out.println(count);
    
    int pageNo = 1;//当前页码
    int pageSize = 5;//每页记录数
    List<User> users = mongoTemplate.find(query.skip((pageNo - 1) * pageSize).limit(pageSize), User.class);
    System.out.println(users);
}
学新通

修改

/**
 * 修改
 */
@Test
public void updateTest(){
    //创建查询条件
    Query query = new Query(Criteria.where("_id").is("61ae15d9a820aa7d83c10671"));
    //修改条件
    Update update = new Update();
    update.set("name","newName");
    UpdateResult upsert = mongoTemplate.upsert(query, update, User.class);

    long modifiedCount = upsert.getModifiedCount();//影响的行数
    System.out.println(modifiedCount);
}

删除

/**
 * 删除
 */
@Test
public void deleteUser(){
    Query query = new Query(Criteria.where("_id").is("61ae15d9a820aa7d83c10671"));
    DeleteResult remove = mongoTemplate.remove(query, User.class);
    long deletedCount = remove.getDeletedCount();//影响行数
    System.out.println(deletedCount);
}

MongoRepository

创建一个接口,继承MongoRepository

public interface UserRepository extends MongoRepository<User,String> {
}

调用UserRepository来进行增删改查的操作

查询的方法与MongoTemplate基本一致,增删改等,逻辑一样,调用的方法有细微的差距

添加

//有id就是修改,没有id就是保存

@Autowired
private UserRepository userRepository;

/**
 * 添加操作
 */
@Test
void contextLoads() {
    User user = new User();
    user.setName("respUserName1");
    user.setAge(28);
    user.setEmail("resp2@qq.com");
    User save = userRepository.save(user);
    System.out.println(save);
}

简单查询

/**
 * 查询所有
 */
@Test
public void TestFindAll(){
    List<User> all = userRepository.findAll();
    System.out.println(all);
}
  /**
     * 根据id查询
     */
    @Test
    public void testFindById(){
//        Optional<User> byId = userRepository.findById("61ae31d21aa43a1019b68c64");
        User user = userRepository.findById("61ae31d21aa43a1019b68c64").get();
        System.out.println(user);

条件查询

/**
 * 根据条件查询
 */
@Test
public void testQuery(){
    //name = respUserName1 and age = 28
    User user = new User();
    user.setName("respUserName1");
    user.setAge(28);
    Example<User> userExample = Example.of(user);
    List<User> all = userRepository.findAll(userExample);
    System.out.println(all);
}

模糊查询

/**
 * 模糊查询
 */
@Test
public void findLick(){
    //创建匹配器,即如何使用查询条件
    ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
            .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
            .withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
    User user = new User();
    user.setName("Name1");
    Example<User> userExample = Example.of(user,matcher);
    List<User> all = userRepository.findAll(userExample);
    System.out.println(all);
}

分页查询

/**
     * 分页查询
     */
    @Test
    public void pageLimit(){

        Sort sort = Sort.by(Sort.Direction.DESC, "age");
//0为第一页
        Pageable pageable = PageRequest.of(0, 10, sort);
//创建匹配器,即如何使用查询条件
        ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
                .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
                .withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
        User user = new User();
        user.setName("Name1");
//创建实例
        Example<User> example = Example.of(user, matcher);
        Page<User> pages = userRepository.findAll(example, pageable);
        System.out.println(pages);
    }
学新通

修改

修改和保存用的是同一个方法 save()

//有id就是修改,没有id就是保存

/**
 * 修改
 */
@Test
public void updateTest(){
    User user = new User();
    user.setId("61ae31d21aa43a1019b68c64");
    user.setName("respUserName2");
    User save = userRepository.save(user);//有id就是修改,没有id就是保存
    System.out.println(save);
}

删除

/**
 * 删除
 */
@Test
public void deleteUser(){
    userRepository.deleteById("61ae31d21aa43a1019b68c64");
}

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgacgfb
系列文章
更多 icon
同类精品
更多 icon
继续加载