MongoDB的搭建 和crud操作

MongoDB

docker 下载

linux 复制代码
docker run --restart=always -d --name mongo -v /docker/mongodb/data:/data/db -p 27017:27017 mongo:4.0.6

使用navcat工具使用MongoDB

Crud操作

jar包

xml 复制代码
<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

实体类

java 复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
// 作用时与 MongoDB中的206_person对应
@Document("206_person")
public class Person {
    @Id
    private Integer id;
    private String  name;
    private Integer girls;
}

导入的包,如果出现错误进行参考

java 复制代码
import com.hb.model.Person;
import com.mongodb.client.ListIndexesIterable;
import com.mongodb.client.model.Indexes;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.index.Index;
import org.springframework.data.mongodb.core.index.IndexInfo;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@SpringBootTest
class AppTests {
    @Resource
    private MongoTemplate mongoTemplate;
   
   }

官方文档

示例均以spring boot 测试类

创建(增)

java 复制代码
 //插入
    @Test
    //插入一条数据
    void mongoDBInsert() {
        Person shuai1 = Person.builder().id(1).name("小帅").girls(10086).build();
        mongoTemplate.insert(shuai1);
    }
    @Test
    //插入多条数据
    void mongoDBInsertAll() {
        List<Person> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            Person shuai1 = Person.builder().id(i).name("小帅"+ i).girls(10086).build();
            list.add(shuai1);
        }
        mongoTemplate.insertAll(list);
    }

修改(改)

java 复制代码
 //更新
    @Test
    //有数据更新数据 没有数据创建数据
    void mongoDBSave() {

            Person shuai1 = Person.builder().id(1).name("小帅shuai ").girls(1008611).build();
        mongoTemplate.save(shuai1);
    }
    @Test
    //根据 条件 进行对多条数据进行更新
    void mongoDBUpdate() {
        Query query = new Query();
        query.addCriteria(Criteria.where("name").is("小帅"));
        Update update = new Update();
        Update id = update.set("name", "ggg");
        UpdateResult updateResult = mongoTemplate.updateMulti(query, update, Person.class);
        System.out.println(updateResult);

    }
    @Test
    //根据 条件 进行数据的更新
    void mongoDBUpset() {
        Query query = new Query();
        //更新的条件
        query.addCriteria(Criteria.where("id").is(3));
        //更新的内容
        Update update = new Update();
        Update id = update.set("name", "ggg");
        //更新找到的第一个数据
        UpdateResult updateResult = mongoTemplate.updateFirst(query, update, Person.class);
        System.out.println(updateResult);
    }
    @Test
    //根据 正则表达式 and 连接 条件 进行数据的更新
    void mongoDBUpsetMany() {
        Query query = new Query();
        Query query1 = query.addCriteria(Criteria.where("id").gt(4)
                .and("name").regex(".*gg$"));
        Update update = new Update().set("name","嘎嘎");
        //更新找到的第一个数据
        UpdateResult updateResult = mongoTemplate.updateMulti(query,update,Person.class);
        System.out.println(updateResult);
    }

删除(删)

java 复制代码
  //删
    @Test
    //根据 正则表达式 and 连接 条件 进行数据的删除 不返回数据
    void mongoDBDelete() {
        Query query = new Query();
        Query query1 = query.addCriteria(Criteria.where("id").gt(4)
                .and("name").regex(".*嘎嘎$"));
        //更新找到的第一个数据
        DeleteResult remove = mongoTemplate.remove(query, Person.class);
        System.out.println(remove);
    }
    @Test
    //根据 正则表达式 and 连接 条件 进行数据的删除 返回数据
    void mongoDBDeleteReturnOne() {
        Query query = new Query();
        Query query1 = query.addCriteria(Criteria.where("id").lt(4)
                .and("name").regex(".*gg$"));
        //更新找到的第一个数据
        Person andRemove = mongoTemplate.findAndRemove(query, Person.class);
        System.out.println(andRemove);
    }
    @Test
    //根据 正则表达式 and 连接 条件 进行数据的删除 返回数据
    void mongoDBDeleteReturnAny() {
        Query query = new Query();
        Query query1 = query.addCriteria(Criteria.where("id").lt(4)
                .and("name").regex(".*gg$"));
        //更新找到的第一个数据
        List<Person> allAndRemove = mongoTemplate.findAllAndRemove(query, Person.class);
        System.out.println(allAndRemove);
   
    }

读取(查)

java 复制代码
 //查
    @Test
        //找到全部
    void mongoDBFindAll() {
        List<Person> allAndRemove = mongoTemplate.findAll(Person.class);
        System.out.println(allAndRemove);
    }
    @Test
    //找到符合条件的第一个数据
    void mongoDBFindOne() {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").in(1,2,3,4,5,6,7));
        //根据条件找到的第一个数据
        Person person= mongoTemplate.findOne(query,Person.class);
        System.out.println(person);
    }
    @Test
    //找到符合条件的第一个数据
    void mongoDBFindAny() {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").in(1,2,3,4,5,6,7));
        //根据条件找到的第一个数据
        List<Person> people = mongoTemplate.find(query, Person.class);
        System.out.println(people
        );
    }
    @Test
    //找到id
    void mongoDBFindById() {
        //根据条件找到的第一个数据
        Person people = mongoTemplate.findById(3, Person.class);
        System.out.println(people);
    }
    @Test
    //找到 根据or和正则进行查找所有
    void mongoDBFindByOr() {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").gte(4)
                .orOperator(Criteria.where("name").regex("^小帅.*")));
        //根据条件找到的第一个数据
        List<Person> people = mongoTemplate.find(query, Person.class);
        System.out.println(people);
    }
    @Test
    //  find by sort
    // Sort.Direction.DESC 降序排列  默认为升序
    // 这里需要记得order by 在limit和skip之前
    void mongoDBFindBySort() {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").gte(4)
                .orOperator(Criteria.where("name").regex("^小帅.*")));
        query.with(Sort.by(Sort.Direction.DESC,"name")).limit(2).skip(3);
        //根据条件找到的第一个数据
        List<Person> people = mongoTemplate.find(query, Person.class);
        System.out.println(people);
    }
    @Test
    //  find by count
    void mongoDBCount() {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").gte(4)
                .orOperator(Criteria.where("name").regex("^小帅.*")));
        query.with(Sort.by(Sort.Direction.DESC,"name")).skip(3);
        //根据条件找到的第一个数据
        Long people = mongoTemplate.count(query, Person.class);
        System.out.println(people);
    }

创建索引

java 复制代码
    //索引操作

    @Test
    public void createAscendingIndex() {
        // 设置字段名称
        String field = "age";
        // 通过表名字创建索引
        mongoTemplate.getCollection("person").createIndex(Indexes.descending(field));
        //获取索引位置 Person.class 对应的 "206_Person"
        int i = mongoTemplate.getCollectionName(Person.class).indexOf("age");
        System.out.println(i);

        //设置 Person对应的 206_persion 中的索引
        String s = mongoTemplate.indexOps(Person.class).ensureIndex(new Index().on("id", Sort.Direction.ASC));
        System.out.println(s);
    }

    /**
     * 根据索引名称移除索引
     */
    @Test
    public void removeIndex() {
        // 设置字段名称
        String field = "age_-1";
        // 删除索引
        mongoTemplate.getCollection("person").dropIndex(field);
       // mongoTemplate.indexOps(Person.class).dropIndex(field);
    }

    /**
     * 查询集合中所有的索引
     */
    @Test
    public void getIndexAll() {
        // 获取集合中所有列表 by 表名字
        ListIndexesIterable<Document> indexes = mongoTemplate.getCollection("person").listIndexes();
        // 获取索引
        for (Document index : indexes) {
            System.out.println(index.toJson());
            System.out.println("-----------------------------");
        }
        // 获取集合中所有列表 by 类
        List<IndexInfo> indexInfo = mongoTemplate.indexOps(Person.class).getIndexInfo();
        for (IndexInfo info : indexInfo) {
            System.out.println("206 " + info);
        }
    }
相关推荐
吹老师个人app编程教学31 分钟前
ClickHouse的介绍、安装、数据类型
数据库·clickhouse·oracle
I_Am_Me_32 分钟前
【MySQL】阶段性总结
数据库·oracle
网络安全queen37 分钟前
网络安全等级测评师
网络·数据库·学习·安全·web安全
csdn5659738501 小时前
Elasticsearch 查看磁盘占用 查看指定索引磁盘占用
java·数据库·elasticsearch
稻草人ZZ1 小时前
etcd部署(基于v3.5.15)
数据库·etcd
陈鋆1 小时前
MySQL深入:B+树的演化、索引和索引结构
数据库·b树·mysql
小天博客1 小时前
PgSQL汇总
数据库·postgresql·pgsql
大保安DBA1 小时前
力扣2298. 周末任务计数
数据库·算法·leetcode
冰箱里的金鱼1 小时前
Redis 内存管理
数据库·redis·缓存
SlothLu2 小时前
Debezium-MySqlConnectorTask
java·大数据·数据库·多线程·数据库开发·debezium·数据迁移