springboot整合mongodb和基本使用

springboot整合mongodb和基本使用

引入依赖

 <!-- mongodb的依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

application.yaml配置地址

spring:
  elasticsearch:
    uris: 192.168.155.20:9200   # es的连接地址
  data:
    mongodb:
#      uri: mongodb://fox:fox@192.168.155.20:27017/test?authSource=admin  使用这种不用下面那么麻烦了
      host: 192.168.155.20
      port: 27017
      database: appdb    # 数据库

创建实体类

package com.example.esdemo.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import java.util.Date;

/**
 * @author
 * @desc mongodb的实体类--对应文档操作  es也有 看包路径区分
 * @date
 */
@Data
@Document("emp")   //指定emp集合中的一个文档
@AllArgsConstructor
@NoArgsConstructor
public class MongoEntity {

    @Id     //映射文档中的_id  不让mongodb自己生成了 不太好看
    private Integer id;

    @Field("username")  //往mongodb中存的key是username
    private String name;

    @Field
    private int age;

    @Field
    private Double salary;

    @Field
    private Date birthday;

}

测试查询文档

@SpringBootTest
class EsDemoApplicationTests {

@Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 测试集合emp
     */
    @Test
    public void createCollection() {
        boolean emp = mongoTemplate.collectionExists("emp");
        if (emp) {
            mongoTemplate.dropCollection("emp");
        }
        mongoTemplate.createCollection("emp");
    }

 /**
     * 测试往集合中 插入文档
     */
    @Test
    public void testInsert() {
        MongoEntity entity = new MongoEntity(1, "小明", 30, 10000.00, new Date());

        //save存在时会更新  MongoEntity(id=1, name=小明, age=30, salary=10000.0, birthday=Sun Aug 13 09:18:51 CST 2023)
//        MongoEntity save = mongoTemplate.save(entity);
//
//        //insert存在时会抛出异常
//        MongoEntity insert = mongoTemplate.insert(entity);

//        System.out.println(save);
//        System.out.println(insert);

        //批量插入操作
        List<MongoEntity> mongoEntities = Arrays.asList(new MongoEntity(2, "李四", 40, 10000.00, new Date()),
                new MongoEntity(3, "李四", 40, 10000.00, new Date()),
                new MongoEntity(4, "王五", 50, 10000.00, new Date()),
                new MongoEntity(5, "五五", 60, 10000.00, new Date()),
                new MongoEntity(6, "六六", 70, 10000.00, new Date())
        );
        Collection<MongoEntity> insert = mongoTemplate.insert(mongoEntities, MongoEntity.class);
        System.out.println(insert);
        //[MongoEntity(id=2, name=李四, age=40, salary=10000.0, birthday=Sun Aug 13 09:24:27 CST 2023), MongoEntity(id=3, name=李四, age=40, salary=10000.0, birthday=Sun Aug 13 09:24:28 CST 2023), MongoEntity(id=4, name=王五, age=50, salary=10000.0, birthday=Sun Aug 13 09:24:28 CST 2023), MongoEntity(id=5, name=五五, age=60, salary=10000.0, birthday=Sun Aug 13 09:24:28 CST 2023), MongoEntity(id=6, name=六六, age=70, salary=10000.0, birthday=Sun Aug 13 09:24:28 CST 2023)]

    }


/**
     * 测试查询集合中的文档
     */
    @Test
    public void testQuery() {
//        List<MongoEntity> all = mongoTemplate.findAll(MongoEntity.class);
//        System.out.println(all);
//        // [MongoEntity(id=1, name=小明, age=30, salary=10000.0, birthday=Sun Aug 13 09:18:51 CST 2023), MongoEntity(id=2, name=李四, age=40, salary=10000.0, birthday=Sun Aug 13 09:24:27 CST 2023), MongoEntity(id=3, name=李四, age=40, salary=10000.0, birthday=Sun Aug 13 09:24:28 CST 2023), MongoEntity(id=4, name=王五, age=50, salary=10000.0, birthday=Sun Aug 13 09:24:28 CST 2023), MongoEntity(id=5, name=五五, age=60, salary=10000.0, birthday=Sun Aug 13 09:24:28 CST 2023), MongoEntity(id=6, name=六六, age=70, salary=10000.0, birthday=Sun Aug 13 09:24:28 CST 2023)]
//        MongoEntity byId = mongoTemplate.findById(1, MongoEntity.class);
//        System.out.println(byId);
//
//        //多个的话 返回第一个
//        MongoEntity one = mongoTemplate.findOne(new Query(), MongoEntity.class);
//        System.out.println(one);


        //根据指定条件查询 -- 构建Query对象
        // new Query()表示没有条件
        //薪资大于等于8000的员工  double类型的 gte后面需要写double
//        Query query = new Query(Criteria.where("salary").gte(8000));
        //薪资大于4000小于10000的员工
//        Query query = new Query(Criteria.where("salary").gt(6000).lt(10000));
        //模糊匹配  regex后面不需要写//
//        Query query = new Query(Criteria.where("name").regex("李"));

        //多条件查询 and or
        Criteria criteria = new Criteria();
        //and 查询年龄大于28&薪资大于多少的
        criteria.andOperator(Criteria.where("age").gt(30),Criteria.where("salary").gte(10000));
        //or  年龄小于 &薪资大于
//        criteria.orOperator(Criteria.where("name").is("张三"),Criteria.where("salary").gte(10000));
        Query query = new Query(criteria);

        //查的数据排序 前面都是一样的 在Query后接条件
        query.with(Sort.by(Sort.Order.desc("salary")));

        //分页的话 往后面再加
        query.with(Sort.by(Sort.Order.desc("salary"))).skip(0).limit(4);

        List<MongoEntity> list = mongoTemplate.find(query, MongoEntity.class);
        //快速打印集合 void
        list.forEach(System.out::println);
    }

/**
     * 使用json字符串的形式查询
     */
    @Test
    public void jsonQueryTest() {
        //等值查询
//        String json = "{username:'李四'}";
        //多条件查询
        String json = "{$or:[{age:{$gt:40}},{salary:{$gte:10000}}]}";
        Query basicQuery = new BasicQuery(json);

        List<MongoEntity> list = mongoTemplate.find(basicQuery, MongoEntity.class);
        list.forEach(System.out::println);
    }


}```


/**
     * 使用json字符串的形式查询
     */
    @Test
    public void jsonQueryTest() {
        //等值查询
//        String json = "{username:'李四'}";
        //多条件查询
        String json = "{$or:[{age:{$gt:40}},{salary:{$gte:10000}}]}";
        Query basicQuery = new BasicQuery(json);

        List<MongoEntity> list = mongoTemplate.find(basicQuery, MongoEntity.class);
        list.forEach(System.out::println);
   }

测试修改文档

/**
     * 测试修改文档
     */
    @Test
    public void testUpdate() {
        Query query = new Query(Criteria.where("salary").gte(200000));
        List<MongoEntity> list = mongoTemplate.find(query, MongoEntity.class);
        list.forEach(System.out::println);

        Update update = new Update();
        //设置更新属性
        update.set("salary",13000);

        //修改满足条件的第一条记录  需要查询条件 修改结果
//        UpdateResult updateResult = mongoTemplate.updateFirst(query, update, MongoEntity.class);
        //更新满足条件的所有
//        UpdateResult updateResult = mongoTemplate.updateMulti(query, update, MongoEntity.class);
        //upsert 没有符合条件的就插入 和下面的id是一样的  修改id使用这个吧
        update.setOnInsert("id",11);
//        update.set("id",14);
        UpdateResult updateResult = mongoTemplate.upsert(query, update, MongoEntity.class);

        //返回修改的记录数
        System.out.println("修改的记录数为: "+updateResult.getModifiedCount());

        //更新后
        System.out.println("更新后-------------");
        List<MongoEntity> list1 = mongoTemplate.find(query, MongoEntity.class);
        list1.forEach(System.out::println);
    }

测试删除文档

 /**
     * 删除测试
     */
    @Test
    public void deleteTest() {
        //删除所有文档  使用dropCollection()
//        mongoTemplate.remove(new Query(),MongoEntity.class);

        //条件删除
        Query query = new Query(Criteria.where("salary").gte(14000));
        DeleteResult remove = mongoTemplate.remove(query, MongoEntity.class);
        System.out.println("删除数量是:"+remove.getDeletedCount());
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值