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);
        }
    }
相关推荐
建投数据41 分钟前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi2 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀2 小时前
Redis梳理
数据库·redis·缓存
独行soc2 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天2 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺2 小时前
分布式系统架构:服务容错
数据库·架构
独行soc3 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
White_Mountain4 小时前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship4 小时前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站4 小时前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle