MongoDb相关知识及上手

MongoDB是一种文档数据库,使用JSON格式存储数据,支持复杂的查询和聚合操作。它是一个分布式的、高性能的、开源的NoSQL数据库,具有高可扩展性和灵活性,适合大规模数据存储和处理。MongoDB的主要特点包括:

  1. 非关系型数据库:与传统关系型数据库不同,MongoDB采用文档存储方式,文档可以嵌套其他文档或数组,更加灵活自由。
  2. 高可扩展性:MongoDB支持水平扩展,可以方便地进行集群部署,适合海量数据存储和高并发读写操作。
  3. 高性能:MongoDB使用内存映射文件的方式进行数据读写,可以快速地进行数据访问和查询操作。
  4. 多样的数据模型:MongoDB支持多种数据模型,包括文档、键值、图形、列式等多种数据结构,可以满足不同场景下的需求。
  5. 强大的查询和聚合功能:MongoDB支持多种查询操作,包括范围查询、全文搜索、地理位置查询等,同时支持聚合操作,可以进行复杂的数据分析和统计。 总之,MongoDB是一款具有高性能、高可扩展性和灵活性的文档数据库,适合存储和处理大规模的非结构化数据

适合场景

  • 需要存储大量非结构化数据的应用:MongoDB的文档存储方式非常适合存储非结构化的数据,例如日志、社交媒体数据、传感器数据等。
  • 需要进行高并发读写操作的应用:MongoDB支持水平扩展,可以方便地进行集群部署,适合处理高并发读写请求。
  • 需要进行复杂数据查询和聚合操作的应用:MongoDB支持强大的查询和聚合功能,可以进行复杂的数据分析和统计。
  • 需要实时处理数据的应用:MongoDB支持实时数据处理,可以快速地进行数据读写操作。
  • 需要支持灵活性和易扩展性的应用:MongoDB的非关系型数据库设计使其非常灵活,可以方便地进行修改和扩展。 总之,MongoDB适用于需要高性能、高可扩展性和灵活性的应用场景,特别是需要处理大规模非结构化数据的应用。

安装部署

  1. 拉取镜像

    docker pull mongo
    docker pull mongo-express
    

    docker-compose.yml:

    services:
      mongo:
        image: mongo
        restart: always
        environment:
          MONGO_INITDB_ROOT_USERNAME: root
          MONGO_INITDB_ROOT_PASSWORD: root
        volumes:
          - ./mongo_db:/data/db
      mongo-express:
        image: mongo-express
        restart: always
        ports:
          - 8081:8081
        environment:
          ME_CONFIG_MONGODB_ADMINUSERNAME: root
          ME_CONFIG_MONGODB_ADMINPASSWORD: root
    
  2. 运行容器

    docker-compose up
    

与SpringBoot集成

  1. 添加依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    
  2. 配置连接信息

    spring:
      data:
        mongodb:
          host: 192.168.48.40
          port: 27017
          username: ecs
          password: 123456
          database: ecs
    
  3. 定义实体类和repository

    使用@Document注解指定mongodb的集合名称:

    @Document(collection = "users")
    public class User {
        @Id
        private String id;
        private String name;
        private int age;
    }
    

    定义Repository,继承MongoRepository接口,可以继承其他的接口,例如SortingRepository、PagingAndSortingRepository等:

    @Repository
    public interface UserRepository extends MongoRepository<User, String> {
        List<User> findByName(String name);
        List<User> findByAgeGreaterThan(int age);
    }
    
  4. 使用repository进行CRUD操作

    使用自动注入的UserRepository对象进行CRUD操作:

    @Service
    public class UserService {
        @Autowired
        private UserRepository userRepository;
        public void save(User user) {
            userRepository.save(user);
        }
        public List<User> findByName(String name) {
            return userRepository.findByName(name);
        }
        public List<User> findByAgeGreaterThan(int age) {
            return userRepository.findByAgeGreaterThan(age);
        }
    }
    

    常用方法

    1. 获取连接对象
    MongoClient mongoClient = new MongoClient("localhost", 27017);
    
    1. 获取数据库和集合操作对象
    MongoDatabase database = mongoClient.getDatabase("test");
    MongoCollection<Document> collection = database.getCollection("users");
    
    1. 插入文档

      Document doc = new Document("name", "张三").append("age", 20);
      collection.insertOne(doc);
      
    2. 查询文档

      FindIterable<Document> docs = collection.find(new Document("name", "张三"));
      for (Document doc : docs) {
          System.out.println(doc.toJson());
      }
      
    3. 更新文档

      collection.updateOne(new Document("name", "张三"), new Document("$set", new Document("age", 30)));
      
    4. 删除文档

      collection.deleteOne(new Document("name", "张三"));
      
    5. 关闭连接

      collection.deleteOne(new Document("name", "张三"));
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值