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
  1. 运行容器
docker-compose up

与SpringBoot集成

  1. 添加依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
  1. 配置连接信息
spring:
  data:
    mongodb:
      host: 192.168.48.40
      port: 27017
      username: ecs
      password: 123456
      database: ecs
  1. 定义实体类和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);
}
  1. 使用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);
  1. 查询文档
FindIterable<Document> docs = collection.find(new Document("name", "张三"));
for (Document doc : docs) {
    System.out.println(doc.toJson());
}
  1. 更新文档
collection.updateOne(new Document("name", "张三"), new Document("$set", new Document("age", 30)));
  1. 删除文档
collection.deleteOne(new Document("name", "张三"));
  1. 关闭连接
collection.deleteOne(new Document("name", "张三"));