首页 > 其他分享 >MongDB

MongDB

时间:2022-08-24 20:34:19浏览次数:54  
标签:MongDB void 查询 User Test public user

MongoDB的安装和常用操作

  1. Docker安装MongDB

    1. 拉取镜像
    docker pull mongo:latest
    
    1. 创建和启动容器
    docker run -d --restart=always -p 27017:27017 --name mymongo -v /data/db:/data/db -d mongo
    
    1. 进入容器
    docker exec -it mymongo /bin/bash
    
    1. 使用MongoDB客户端进行操作
    mongo 
    
  2. MongDB中简单的概念

    1. 数据库:相当于MySQL中的数据库
    2. 集合:相当于MySQL中的表。MongDB中集合就是文档组
    3. 文档:相当于MySQL中的记录。MongDB中文档是一组键值
    4. MongDB中不支持表连接;含主键、索引。MongDB中的主键即_id这个键
  3. MongDB数据库的常用操作

    1. 切换/创建数据库(数据库不存在则创建)
    use 数据库名;
    
    1. 查询所有的数据库
    show dbs;
    
    1. 删除当前使用数据库
    db.dropDatabase();
    
    1. 查看当前使用的数据库
    db.getName();
    
    1. 显示当前db状态
    db.stats();
    
    1. 查看当前db的链接机器地址
    db.getMongo();
    
    1. 创建一个集合
    db.createCollection("集合名字");
    
    1. 得到指定名称的集合
    db.getCollection("集合名字");
    
    1. 向集合中添加一个文档
    db.集合名.save({xxx:xx});
    
    1. 在集合中查询符合条件的文档
    db.集合名.find({条件});
    # 不指定条件则表示查询集合中所有的文档
    db.集合名.find();
    
    1. 排序
    # 示例:对年龄升序
    1 和 -1 来指定排序的方式,User是一个集合
    db.User.find().sort({age:1})
    

    等等

Spring集成MongoDB

  1. 前置项
    1. 导入MongoDB依赖
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    
    1. 添加配置信息:在配置文件中指定了mongdb数据库的位置和使用的具体数据库
    spring.data.mongodb.uri=mongodb://120.55.87.98:27017/test
    
    1. 创建实体类:实体类中指定了位于数据库中的指定集合
    @Data
    // 指定对应MongoDB数据库中的集合名称
    @Document("User")
    public class User {
        @Id
        private String id;
        private String name;
        private Integer age;
        private String email;
        private String createDate;
    }
    
  2. 方式1:使用MongoTemplate访问Mongodb
@SpringBootTest
class MongdbDemoApplicationTests {
    @Autowired
    private MongoTemplate mongoTemplate;
    @Test
    // 往集合中添加文档(集合名称在实体类中已经指定)
    public void createUser() {
        User user = new User();
        user.setAge(20);
        user.setName("张三");
        user.setEmail("[email protected]");
        User insert = mongoTemplate.insert(user);
        System.out.println(insert);
    }
    // 查询集合中所有的文档
    @Test
    public void findAll() {
        List<User> userList = mongoTemplate.findAll(User.class);
        System.out.println(userList);
    }
    // 根据id查询
    @Test
    public void getById() {
        User user = mongoTemplate.findById("627734f3e5cd55d257ad5c5e", User.class);
        System.out.println(user);
    }
    // 条件查询
    @Test
    public void conditionQuery() {
        // 查询名字张三,年龄20的用户
        Query query = new Query(Criteria.where("name").is("张三").and("age").is(20));
        List<User> userList = mongoTemplate.find(query, User.class);
        System.out.println(userList);
    }
    // 模糊查询
    @Test
    public void likeQuery() {
        // 查询名字包含n或者N的用户
        String name = "n";
        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> userList = mongoTemplate.find(query, User.class);
        System.out.println(userList);
    }
    // 分页查询
    @Test
    public void pageQuery() {
        String name = "n";
        // 查询第一页10条数据(页号从1开始)
        int pageNo = 1;
        int pageSize = 10;

        //构造查询条件:名字包含n或者N的
        Query query = new Query();
        String regex = String.format("%s%s%s", "^.*", name, ".*$");
        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        query.addCriteria(Criteria.where("name").regex(pattern));

        int totalCount = (int) mongoTemplate.count(query, User.class);
        List<User> userList = mongoTemplate.find(query.skip((pageNo - 1) * pageSize).limit(pageSize), User.class);

        Map<String, Object> pageMap = new HashMap<>();
        pageMap.put("list", userList);
        pageMap.put("totalCount",totalCount);
        System.out.println(pageMap);
    }
    // 修改
    @Test
    public void update() {
        User user = mongoTemplate.findById("62773d17e5cd55d257ad5c60", User.class);
        user.setName("张大大");
        user.setAge(25);
        user.setEmail("[email protected]");
        Query query = new Query(Criteria.where("_id").is(user.getId()));
        Update update = new Update();
        update.set("name", user.getName());
        update.set("age", user.getAge());
        update.set("email", user.getEmail());
        UpdateResult result = mongoTemplate.upsert(query, update, User.class);
        long count = result.getModifiedCount();
        System.out.println(count);
    }
    // 删除
    @Test
    public void delete() {
        Query query = new Query(Criteria.where("_id").is("6277340cb142813efba79eee"));
        DeleteResult deleteResult = mongoTemplate.remove(query, User.class);
        // 打印1表示成功删除一条文档
        System.out.println(deleteResult.getDeletedCount());
    }

}
  1. 方式2:使用MongoRepository访问Mongodb
    1. 自定义接口继承自MongoRepository,之后通过接口实现类的对象调用MongoRepository中的方法完成CURD
    @SpringBootTest
    public class Test {
        @Autowired
        private UserRepository userRepository;
        @org.junit.jupiter.api.Test
        // 向集合中添加文档
        public void create() {
            User user = new User();
            user.setName("李四");
            user.setAge(24);
            user.setEmail("[email protected]");
            User save = userRepository.save(user);
        }
        // 查询集合中所有的文档
        @org.junit.jupiter.api.Test
        public void findAllUser() {
            List<User> userList = userRepository.findAll();
            System.out.println(userList);
        }
        // 根据id查询用户
        @org.junit.jupiter.api.Test
        public void findById() {
            Optional<User> user = userRepository.findById("627866e9a7183c1b2ffaf1bb");
            System.out.println(user.get());
        }
        // 条件查询
        @org.junit.jupiter.api.Test
        public void conditionQuery() {
            User probe = new User();
            // 查询姓名为李四年龄为24的用户
            probe.setName("李四");
            probe.setAge(24);
            Example<User> example = Example.of(probe);
            List<User> userList = userRepository.findAll(example);
            System.out.println(userList);
        }
        // 模糊查询
        @org.junit.jupiter.api.Test
        public void findUsersLikeName() {
    
            //创建匹配器,即如何使用查询条件
            ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
                    .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
                    .withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
            User user = new User();
            user.setName("四");
            Example<User> userExample = Example.of(user, matcher);
            List<User> userList = userRepository.findAll(userExample);
            System.out.println(userList);
    
        }
        // 分页查询
        @org.junit.jupiter.api.Test
        public void pageQuery() {
            // 按照年龄升序
            Sort sort = Sort.by(Sort.Direction.ASC, "age");
            // 0为第一页,2条记录
            Pageable pageable = PageRequest.of(0, 2, sort);
            Page<User> users = userRepository.findAll(pageable);
            System.out.println(users);
        }
        // 修改
        @org.junit.jupiter.api.Test
        public void update() {
            // 查询出指定的文档
            User user = userRepository.findById("627735cee5cd55d257ad5c5f").get();
            user.setName("王五");
            user.setEmail("666.com");
            // 修改
            User save = userRepository.save(user);
            System.out.println(save);
        }
        // 删除
        @org.junit.jupiter.api.Test
        public void delete() {
            userRepository.deleteById("627866e9a7183c1b2ffaf1bb");
        }
    }
    

标签:MongDB,void,查询,User,Test,public,user
From: https://www.cnblogs.com/xiaocer/p/16621466.html

相关文章

  • golang_mongdb 事务
    这里还没有开始弄:/Users/mac/工作/goland/github/mongo-go-examplesfuncTestTransactionCommit(t*testing.T){varerrerrorvarclient*mongo.Client......