Mongo入门使用

Mongo在linux下的安装

#拉取镜像

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 #查询所有的数据库

 Mongo基本概念

1概念

不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档、集合、数据库,下面我们挨个介绍。

下表将帮助您更容易理解Mongo中的一些概念:

SQL术语/概念

MongoDB术语/概念

解释/说明

database

database

数据库

table

collection

数据库表/集合

row

document

数据记录行/文档

column

field

数据字段/域

index

index

索引

table joins

表连接,MongoDB不支持

primary key

primary key

主键,MongoDB自动将_id字段设置为主键

 2.数据库基本命令

1、 Help查看命令提示

db.help();

2、 切换/创建数据库

use test

如果数据库不存在,则创建数据库,否则切换到指定数据库

3、 查询所有数据库

show dbs;

4、 删除当前使用数据库

db.dropDatabase();

5、 查看当前使用的数据库

db.getName();

6、 显示当前db状态

db.stats();

7、 当前db版本

db.version();

8、 查看当前db的链接机器地址

db.getMongo;

3.文档 

文档是一组键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

1.   文档中的键/值对是有序的。

2、文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。

3、MongoDB区分类型和大小写。

4、MongoDB的文档不能有重复的键。

5、文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

文档键命名规范:

1、键不能含有\0 (空字符)。这个字符用来表示键的结尾。

2、.和$有特别的意义,只有在特定环境下才能使用。

3、以下划线"_"开头的键是保留的(不是严格要求的)。

4.集合

集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。

集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

常用命令

1、 创建一个集合(table)

db.createCollection( "collName");

2、 得到指定名称的集合(table )

db.getCollection("user");

 SpirngBoot集成Mongo

1导入依赖

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

2.配置

地址改为自己linux地址

spring.data.mongodb.uri=mongodb://47.93.118.241:270mongoTemplate.findAll(User.class): 查询User文档的全部数据17/test

 3.MongoTemplate的使用

  

Query对象
1、创建一个query对象(用来封装所有条件对象),再创建一个criteria对象(用来构建条件)
2、 精准条件:criteria.and(“key”).is(“条件”)
模糊条件:criteria.and(“key”).regex(“条件”)
3、封装条件:query.addCriteria(criteria)
4、大于(创建新的criteria):Criteria gt = Criteria.where(“key”).gt(“条件”)
小于(创建新的criteria):Criteria lt = Criteria.where(“key”).lt(“条件”)
5、Query.addCriteria(new Criteria().andOperator(gt,lt));
6、一个query中只能有一个andOperator()。其参数也可以是Criteria数组。
7、排序 :query.with(new Sort(Sort.Direction.ASC, "age"). and(new Sort(Sort.Direction.DESC, "date")))

3.1查询所有

mongoTemplate.findAll(User.class): 查询User文档的全部数据


    //查询所有记录
    public void findAll(){
        List<User> all = mongoTemplate.findAll(User.class);
        System.out.println(all);
    }

 3.2根据id查询

mongoTemplate.findById(<id>, User.class): 查询User文档id为id的数据

   //查询id
    public void findById(){
      User all = mongoTemplate.findById("6331502a91084214bb43a966",User.class);
        System.out.println(all);
    }

 3.3插入

mongoTemplate.insert(User): 新增

   // 插入
    void contextLoads() {

        User user = new User();
        user.setAge(20);
        user.setName("luck2");
        user.setEmail("123@qq.com");
        User insert = mongoTemplate.insert(user);
        System.out.println(insert);
    }

 3.4条件查询

mongoTemplate.find(query, User.class);: 根据query内的查询条件查询

   //条件查询
    public void findUserList(){
        //name=luck and age =20
        

        Query query = new Query(Criteria.where("name").is("luck").and("age").is(20));
        List<User> users = mongoTemplate.find(query, User.class);
        System.out.println(users);
    }

 3.5模糊查询

    //模糊查询
    @Test
    public void findLikeList(){
        //name=test and age =20
        String name="lu";
        //正则表达式拼接
        String regex = String.format("%s%s%s", "^.*", name, ".*$");
        Pattern pattern=Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
        Query query = new Query(Criteria.where("name").regex(pattern));
        List<User> users = mongoTemplate.find(query, User.class);
        System.out.println(users);
    }

3.6修改

mongoTemplate.upsert(query, update, User.class): 修改

3.7删除

mongoTemplate.remove(query, User.class): 删除

  @Test
    public void delete(){


        Query query = new Query(Criteria.where("_id").is("63314e08070e244780a37054"));
        DeleteResult remove = mongoTemplate.remove(query, User.class);

        long count = remove.getDeletedCount();
        System.out.println(count);
    }

3.8分页查询 

 //分页查询
    @Test
    public void findPageList(){
        //name=test and age =20
        String name="lu";
        String regex = String.format("%s%s%s", "^.*", name, ".*$");
        Pattern pattern=Pattern.compile(regex,Pattern.CASE_INSENSITIVE);

        int page=1;
        int size=10;

        Query query = new Query(Criteria.where("name").regex(pattern));
        long total = mongoTemplate.count(query, User.class);

        List<User> pageList = mongoTemplate.find(query.skip((page - 1) * size).limit(size), User.class);

        System.out.println(total);
        System.out.println(pageList);

    }

4.ReposityMongo的使用

4.1使用接口继承ReposityMongo类

public interface UserRepository  extends MongoRepository<User,String> {
}
    //       添加
    @Test
    public void save() {
        User user = new User();
        user.setAge(20);
        user.setName("mary");
        user.setEmail("1211@qq.com");
        User save = userRepository.save(user);
        System.out.println(user);
    }

    //条件查询
    @Test
    public void find() {

        User user = new User();
        user.setAge(20);
        user.setName("mary");
        Example<User> userExample = Example.of(user);
        List<User> all = userRepository.findAll(userExample);
        System.out.println(all);

    }


    //查询所有
    @Test
    public void findAll() {

        List<User> userList = userRepository.findAll();
        System.out.println(userList);
    }


    //    根据id查询
    @Test
    public void findByid() {

        User user = userRepository.findById("63314f9aeb0311db0bc0dc81").get();
        System.out.println(user);
    }

//    模糊查询

    @Test
    public void findLike() {

        User user = new User();
        user.setAge(20);
        user.setName("m");


        //设置模糊查询的匹配规则
        ExampleMatcher matcher = ExampleMatcher.matching().withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
                .withIgnoreCase(true);


        Example<User> userExample = Example.of(user, matcher);
        List<User> all = userRepository.findAll(userExample);
        System.out.println(all);


    }

    //分页查询
    @Test
    public void findCondition() {
//        设置分页参数
        //    0代表第一页
        Pageable pageable = PageRequest.of(0, 3);

        User user = new User();
        user.setAge(20);
        user.setName("mary");
        Example<User> userExample = Example.of(user);
        Page<User> page = userRepository.findAll(userExample, pageable);

        System.out.println(page);

    }

    @Test
    public void update() {
        User user = userRepository.findById("63314f9aeb0311db0bc0dc81").get();
        user.setName("chaoji");
        user.setAge(88);
        user.setEmail("9999.com");

        User save = userRepository.save(user);
        System.out.println(save);

    }


    @Test
    public void delete() {

     userRepository.deleteById("63314f9aeb0311db0bc0dc81");


    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值