SpringBoot 操作 MongoDB

举报
程序员-上善若水 发表于 2022/06/23 23:29:55 2022/06/23
【摘要】 一、 MongoDB 关于MongoDB的介绍和基本操作及副本集群搭建可先参考下面我的博客: MongoDB副本集 集群搭建: https://blog.csdn.net/qq_43692950...

一、 MongoDB

关于MongoDB的介绍和基本操作及副本集群搭建可先参考下面我的博客:
MongoDB副本集 集群搭建:

https://blog.csdn.net/qq_43692950/article/details/114807506

MongoDB基本使用

https://blog.csdn.net/qq_43692950/article/details/114805906

二、 SpringBoot 操作MongoDB

  1. 引入pom依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

  
 
  • 1
  • 2
  • 3
  • 4
  1. application.properties
spring.application.name=mongodb-demo
server.port=8080
# mongodb
#单机模式
#spring.data.mongodb.uri=mongodb://127.0.0.1:27017/demodb
#副本集模式
spring.data.mongodb.uri=mongodb://192.168.40.129:27017,192.168.40.129:27018,192.168.40.129:27019/testdb?connect=replicaSet&slaveOk=true&replicaSet=myrs
#分片集群模式,连接路由服务器的地址
#spring.data.mongodb.uri=mongodb://192.168.40.129:27017,192.168.40.130:27117/testdb

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  1. 实体类
@Data
@Document(collection = "demo_collection")//可以省略,如果省略,则默认使用类名小写映射集合
@CompoundIndex( def = "{'gender': 1, 'age': -1}") //复合索引
public class DemoEntity implements Serializable {
    @Id
    private Long id;
    //单字段的索引
    @Indexed
    //该属性对应mongodb的字段的名字,如果一致,则无需该注解
    @Field("username")
    private String name;
    private int age;
    private int gender;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  1. Repository
@Repository
public interface DemoCollectionRepository extends MongoRepository<DemoEntity,String> {
}

  
 
  • 1
  • 2
  • 3
  1. 基于MongoRepository 的基本操作
@Slf4j
@Service
public class DemoTestService {
    @Autowired
    DemoCollectionRepository demoCollectionRepository;

    /*
    保存数据
    有save和insert方法,
    使用insert:方法,当主键在集合中存在时,不做任何处理, 抛异常
    使用save方法时,当主键在集合中存在时,会进行更新, 数据整体都会更新 ,新数据会替换掉原数据 ID 以外的所有数据。ID 不存在则新增一条数据
     */
    private void save(){
        DemoEntity demoEntity = new DemoEntity();
        demoEntity.setName("abc");
        demoEntity.setAge(18);
        demoEntity.setGender(50);
        //插入一条
        DemoEntity save = demoCollectionRepository.insert(demoEntity);
        log.info(save.toString());

        //插入多条
        List<DemoEntity> list = new ArrayList<>();
        list.add(demoEntity);
        list.add(demoEntity);
        list.add(demoEntity);
        demoCollectionRepository.insert(list);
    }

    /*
    删除数据
    delete(T entities)通过对象信息删除某条数据
    deleteById(ID id)通过id删除某条数据
    deleteALL(Iterable<? extends T> entities)批量删除某条数据
    deleteAll() 清空表中所有的数据
     */
    private void delete(){
        //根据条件删除
        DemoEntity demoEntity = new DemoEntity();
        demoEntity.setName("abc");
        demoCollectionRepository.delete(demoEntity);

        //根据id删除
        demoCollectionRepository.deleteById("1");

        //批量删除
        DemoEntity demoEntity1 = new DemoEntity();
        demoEntity1.setName("abc");
        List<DemoEntity> list = new ArrayList<>();
        demoCollectionRepository.deleteAll(list);

        //删除全部
        demoCollectionRepository.deleteAll();
    }

    /*
    修改数据
     */
    private void update(){
        DemoEntity demoEntity = new DemoEntity();
        demoEntity.setId(1L);
        demoEntity.setName("abc11");
        demoCollectionRepository.save(demoEntity);
    }

    /*
    查询
    findAll() 获取表中所有的数据
    findAll(Sort sort) 获取表中所有的数据,按照某特定字段排序
    findAll(Pageable pageAble) 获取表中所有的数据,分页查询
    findAll(Example< T > example) 条件查询
    findAll(Iterable ids) 条件查询
    findAll(Example< T > example,Pageable pageable) 条件分页查询
    findAll(Example< T > example,Sort sort) 条件查询排序
    findOneById(ID id) 通过id查询一条数据
    findOne(Example example) 通过条件查询一条数据
     */
    public void find(){
        //获取表中所有的数据
        List<DemoEntity> all = demoCollectionRepository.findAll();

//        获取表中所有的数据,按照某特定字段排序
        List<DemoEntity> all1 = demoCollectionRepository.findAll(Sort.by(Sort.Direction.DESC,"id"));

//        获取表中所有的数据,分页查询
        int page = 2;
        int size = 100;
        Page<DemoEntity> all2 = demoCollectionRepository.findAll(PageRequest.of(page, size));

//        批量查询
        List<String> ids = new ArrayList<>();
        ids.add("1");
        ids.add("2");
        Iterable<DemoEntity> allById = demoCollectionRepository.findAllById(ids);

//        查询一条
        DemoEntity demoEntity = new DemoEntity();
        demoEntity.setId(1L);
        demoEntity.setName("abc11");
        Example<DemoEntity> example = Example.of(demoEntity);
        Optional<DemoEntity> one = demoCollectionRepository.findOne(example);
        DemoEntity entity = one.get();

//        条件查询
        demoCollectionRepository.findAll(example);

    }

    /*
    count()统计总数
    count(Example< S > example)条件统计总数
    existsById(ID id) 判断数据是否存在
    exists(Example< T > example) 判断某特定数据是否存在
     */
    public void other(){
        //统计个数
        demoCollectionRepository.count();
        DemoEntity entity1 = new DemoEntity();
        entity1.setName("abc");
        Example<DemoEntity> example = Example.of(entity1);
        long count = demoCollectionRepository.count(example);

        //判断数据是否存在
        boolean b = demoCollectionRepository.existsById("1");
        demoCollectionRepository.exists(example);
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  1. 基于MongoTemplate 的基本操作
@Service
public class DemoDaoImpl implements DemoDao {
    @Resource
    private MongoTemplate mongoTemplate;

    @Override
    public void saveDemo(DemoEntity demoEntity) {
        //当主键在集合中存在时,会进行更新, 数据整体都会更新
        mongoTemplate.save(demoEntity);
        //当主键在集合中存在时,不做任何处理, 抛异常
        mongoTemplate.insert(demoEntity);
    }
    

    @Override
    public void removeDemo(Long id) {
        //根据id删除
        DemoEntity demoEntity = new DemoEntity();
        demoEntity.setId(id);
        mongoTemplate.remove(demoEntity);
    }
    

    @Override
    public void updateDemo(DemoEntity demoEntity) {
        //修改数据
        Query query = new Query(Criteria.where("id").is(demoEntity.getId()).and("name").is("abc"));
        Update update = new Update();
        update.set("name", demoEntity.getName());
        //修改第一条
        mongoTemplate.updateFirst(query, update, DemoEntity.class);
        //修改所有符合条件的
        mongoTemplate.updateMulti(query, update, DemoEntity.class);
    }
    

    @Override
    public DemoEntity findDemoById(Long id) {
        //根据id查询
        Query query = new Query(Criteria.where("id").is(id));
        DemoEntity demoEntity = mongoTemplate.findOne(query, DemoEntity.class);
        return demoEntity;
    }
    

    @Override
    public List<DemoEntity> findDemoAll() {
        //查询全部
        return mongoTemplate.findAll(DemoEntity.class);
    }

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  1. 基于MongoTemplate 中的 Query
Query query = new Query();

 //or
 query.addCriteria(
         new Criteria().orOperator(
                 Criteria.where("name").is("abc"),
                 Criteria.where("name").is("bcv")
         ));
         
         
 //and
 query.addCriteria(
         new Criteria().andOperator(
                 Criteria.where("name").is("abc"),
                 Criteria.where("name").is("bcv")
         ));

 //排序
 query.with(Sort.by(Sort.Direction.DESC,"id"));

 //分页
 query.skip(0).limit(10);


 //and 和 or 一起使用
 query.addCriteria(
         new Criteria().orOperator(
                 Criteria.where("name").is("abc"),
                 new Criteria().andOperator(
                         Criteria.where("name").is("asd"),
                         Criteria.where("age").is(18)
                 )
         )
 );


 //正则
 query.addCriteria(Criteria.where("name").regex("/a/"));
 query.addCriteria(Criteria.where("name").regex("/^a/"));
 
//范围
/*
gt 大于 >
gte 大于等于 >=
lt 小于 <
lte 小于等于 <=
ne 不等于 != 
*/
query.addCriteria(
       new Criteria().andOperator(
          Criteria.where("age").gt(15)
       ));

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

文章来源: blog.csdn.net,作者:小毕超,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_43692950/article/details/115036430

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。