MongoDB入门介绍与实战

目录

[1. 什么是MongoDB?](#1. 什么是MongoDB?)

[2. 安装MongoDB](#2. 安装MongoDB)

[1. 离线安装](#1. 离线安装)

[2. 使用docker-compose安装](#2. 使用docker-compose安装)

[3. mongo命令行实战](#3. mongo命令行实战)

[1. 连接到 MongoDB 数据库](#1. 连接到 MongoDB 数据库)

[2. 创建集合(表)](#2. 创建集合(表))

[3. 插入数据](#3. 插入数据)

[4. 查询数据](#4. 查询数据)

[5. 更新数据](#5. 更新数据)

[6. 删除数据](#6. 删除数据)

[4. Springboot集成MongoDB实战](#4. Springboot集成MongoDB实战)

[Java Main方法中使用示例](#Java Main方法中使用示例)

[1. 添加MongoDB Java驱动依赖](#1. 添加MongoDB Java驱动依赖)

[2. 使用Java与MongoDB交互](#2. 使用Java与MongoDB交互)

Springboot集成Mongo示例

[1. 添加 MongoDB 依赖](#1. 添加 MongoDB 依赖)

[2. 配置 MongoDB 连接](#2. 配置 MongoDB 连接)

[3. 创建实体类](#3. 创建实体类)

[4. 创建 Repository 接口](#4. 创建 Repository 接口)

[5. 编写服务层和控制器](#5. 编写服务层和控制器)

[6. 运行应用程序](#6. 运行应用程序)

[5. 总结](#5. 总结)


1. 什么是MongoDB?

MongoDB是一个面向文档的NoSQL数据库,以其灵活性、可伸缩性和性能而著称。它采用了文档存储模型,数据以JSON类似的BSON格式存储,并支持丰富的查询功能。我们可以使用Java与MongoDB进行交互,实现数据的存储、检索和处理。

官网:MongoDB:应用程序数据平台 | MongoDB

2. 安装MongoDB

1. 离线安装

  1. 下载MongoDB : 前往Download MongoDB Community Server | MongoDB下载对应操作系统的安装程序。
  2. 安装MongoDB : 可以根据文档选择安装方式并设置配置。或参考这篇:【MongoDB】一文带你快速掌握如何在Windows系统和Linux系统中安装部署MongoDB_windows 安装mongodb4-CSDN博客
  3. 启动MongoDB服务

在安装完成后,执行命令行启动mongo:

sudo service mongod start

2. 使用docker-compose安装

创建docker-compose.yml文件并写入以下内容

XML 复制代码
version: '3.8'

services:
  mongodb:
    image: mongo
    container_name: my_mongodb
    ports:
      - "27017:27017"
    volumes:
      - ./data:/data/db  # 将MongoDB数据挂载到本地目录,可持久化数据
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin  # MongoDB的初始用户名
      - MONGO_INITDB_ROOT_PASSWORD=password  # MongoDB的初始密码
    restart: always

执行命令创建并启动

XML 复制代码
docker-compose up -d

执行命令查看MongoDB服务

XML 复制代码
docker ps

3. mongo命令行实战

1. 连接到 MongoDB 数据库

按照上面的方式进行部署完成后,使用命令行连接mongo

bash 复制代码
# 执行命令进入容器
docker exec -it <mongo容器id> /bin/bash

# cd 到bin目录 连接mongo
mongosh -u admin -p

#输入密码


root@09b330d49683:/bin# mongosh -u admin -p
Enter password: ********
Current Mongosh Log ID: 6596bf017f07cfefe7ae2079
Connecting to:          mongodb://<credentials>@127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.1.1
Using MongoDB:          7.0.4
Using Mongosh:          2.1.1

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

------
   The server generated these startup warnings when booting
   2024-01-04T13:58:01.344+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
   2024-01-04T13:58:02.323+00:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
   2024-01-04T13:58:02.323+00:00: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'
   2024-01-04T13:58:02.323+00:00: vm.max_map_count is too low
------

test> show databases;
admin   100.00 KiB
config   60.00 KiB
local    72.00 KiB
test> use admin;
switched to db admin
admin> show tables;

2. 创建集合(表)

bash 复制代码
// 使用use命令切换到数据库
use mydb;

// 创建一个名为my_collection的集合
db.createCollection("my_collection");

3. 插入数据

bash 复制代码
// 插入一条数据到my_collection集合
db.my_collection.insertOne({ "name": "Alice", "age": 25 });

// 插入多条数据到my_collection集合
db.my_collection.insertMany([
    { "name": "Bob", "age": 30 },
    { "name": "Charlie", "age": 35 }
]);

4. 查询数据

bash 复制代码
// 查询my_collection集合中的所有数据
db.my_collection.find();

// 查询年龄大于等于30的数据
db.my_collection.find({ "age": { $gte: 30 } });

// 只返回name字段,不返回_id字段
db.my_collection.find({}, { "name": 1, "_id": 0 });

5. 更新数据

bash 复制代码
// 更新符合条件的第一条数据
db.my_collection.updateOne({ "name": "Bob" }, { $set: { "age": 32 } });

// 更新符合条件的所有数据
db.my_collection.updateMany({ "age": { $gte: 30 } }, { $set: { "status": "active" } });

6. 删除数据

bash 复制代码
// 删除符合条件的第一条数据
db.my_collection.deleteOne({ "name": "Alice" });

// 删除符合条件的所有数据
db.my_collection.deleteMany({ "age": { $gte: 30 } });

4. Springboot集成MongoDB实战

Java Main方法中使用示例

  1. 添加MongoDB Java驱动依赖

Maven项目中,在pom.xml文件中添加以下依赖:

XML 复制代码
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.4.4</version>
</dependency>
  1. 使用Java与MongoDB交互

以下是一个简单的Java示例,演示了如何连接到MongoDB、插入数据并检索数据:

java 复制代码
import com.mongodb.client.*;
import org.bson.Document;

public class MongoDBExample {

    public static void main(String[] args) {
        try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
            System.out.println("成功连接到MongoDB!");

            // 选择数据库和集合
            MongoDatabase database = mongoClient.getDatabase("mydb");
            MongoCollection<Document> collection = database.getCollection("mycollection");

            // 插入文档
            Document doc = new Document("name", "John Doe")
                    .append("age", 30)
                    .append("email", "john@example.com");
            collection.insertOne(doc);
            System.out.println("文档成功插入!");

            // 查询文档
            FindIterable<Document> documents = collection.find();
            for (Document document : documents) {
                System.out.println(document.toJson());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Springboot集成Mongo示例

  1. 添加 MongoDB 依赖

pom.xml 文件中添加 Spring Data MongoDB 依赖:

java 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
  1. 配置 MongoDB 连接

application.properties 文件中配置 MongoDB 连接信息:

java 复制代码
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=mydb
spring.data.mongodb.username=admin
spring.data.mongodb.password=password
  1. 创建实体类

创建一个简单的实体类,代表 MongoDB 中的文档:

java 复制代码
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

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

}
  1. 创建 Repository 接口

创建一个继承自 MongoRepository 的接口,用于操作 MongoDB 中的数据:

java 复制代码
import org.springframework.data.mongodb.repository.MongoRepository;

public interface UserRepository extends MongoRepository<User, String> {
    // 自定义查询方法
    User findByName(String name);
    // 可以定义其他自定义查询方法
}
  1. 编写服务层和控制器

在服务层(Service)和控制器(Controller)中使用 UserRepository 进行数据操作。

java 复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {

    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User saveUser(User user) {
        return userRepository.save(user);
    }

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    public User getUserByName(String name) {
        return userRepository.findByName(name);
    }


}
java 复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @PostMapping
    public User addUser(@RequestBody User user) {
        return userService.saveUser(user);
    }

    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @GetMapping("/{name}")
    public User getUserByName(@PathVariable String name) {
        return userService.getUserByName(name);
    }

}
  1. 运行应用程序

编写完成后,启动 Spring Boot 应用程序,然后通过rest接口进行访问测试。

5. 总结

MongoDB是一个强大而灵活的NoSQL数据库,通过Java驱动程序,我们可以轻松地连接、操作和管理MongoDB数据库。本文介绍了MongoDB的安装过程,并演示了使用Java与MongoDB进行简单交互的实例。希望这些内容能帮助大家学习和使用MongoDB。

相关推荐
Leo.yuan43 分钟前
数据量大Excel卡顿严重?选对报表工具提高10倍效率
数据库·数据分析·数据可视化·powerbi
Runing_WoNiu1 小时前
MySQL与Oracle对比及区别
数据库·mysql·oracle
天道有情战天下1 小时前
mysql锁机制详解
数据库·mysql
看山还是山,看水还是。1 小时前
Redis 配置
运维·数据库·redis·安全·缓存·测试覆盖率
谷新龙0011 小时前
Redis运行时的10大重要指标
数据库·redis·缓存
CodingBrother1 小时前
MySQL 中单列索引与联合索引分析
数据库·mysql
精进攻城狮@2 小时前
Redis缓存雪崩、缓存击穿、缓存穿透
数据库·redis·缓存
小酋仍在学习2 小时前
光驱验证 MD5 校验和
数据库·postgresql
keep__go2 小时前
Linux 批量配置互信
linux·运维·服务器·数据库·shell
小王同学mf2 小时前
怎么尽可能保证 Kafka 的可靠性
数据库