目录
?
?
MongoDB是一个面向文档的NoSQL数据库,以其灵活性、可伸缩性和性能而著称。它采用了文档存储模型,数据以JSON类似的BSON格式存储,并支持丰富的查询功能。我们可以使用Java与MongoDB进行交互,实现数据的存储、检索和处理。
在安装完成后,执行命令行启动mongo:
sudo service mongod start
创建docker-compose.yml文件并写入以下内容
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
执行命令创建并启动
docker-compose up -d
执行命令查看MongoDB服务
docker ps
?按照上面的方式进行部署完成后,使用命令行连接mongo
# 执行命令进入容器
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;
// 使用use命令切换到数据库
use mydb;
// 创建一个名为my_collection的集合
db.createCollection("my_collection");
?
// 插入一条数据到my_collection集合
db.my_collection.insertOne({ "name": "Alice", "age": 25 });
// 插入多条数据到my_collection集合
db.my_collection.insertMany([
{ "name": "Bob", "age": 30 },
{ "name": "Charlie", "age": 35 }
]);
?
// 查询my_collection集合中的所有数据
db.my_collection.find();
// 查询年龄大于等于30的数据
db.my_collection.find({ "age": { $gte: 30 } });
// 只返回name字段,不返回_id字段
db.my_collection.find({}, { "name": 1, "_id": 0 });
?
// 更新符合条件的第一条数据
db.my_collection.updateOne({ "name": "Bob" }, { $set: { "age": 32 } });
// 更新符合条件的所有数据
db.my_collection.updateMany({ "age": { $gte: 30 } }, { $set: { "status": "active" } });
?
// 删除符合条件的第一条数据
db.my_collection.deleteOne({ "name": "Alice" });
// 删除符合条件的所有数据
db.my_collection.deleteMany({ "age": { $gte: 30 } });
?
1. 添加MongoDB Java驱动依赖
Maven项目中,在pom.xml
文件中添加以下依赖:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.4.4</version>
</dependency>
2. 使用Java与MongoDB交互
以下是一个简单的Java示例,演示了如何连接到MongoDB、插入数据并检索数据:
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();
}
}
}
?
1. 添加 MongoDB 依赖
在 pom.xml
文件中添加 Spring Data MongoDB 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
?
2. 配置 MongoDB 连接
在 application.properties
文件中配置 MongoDB 连接信息:
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
?
3. 创建实体类
创建一个简单的实体类,代表 MongoDB 中的文档:
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;
}
?
4. 创建 Repository 接口
创建一个继承自 MongoRepository
的接口,用于操作 MongoDB 中的数据:
import org.springframework.data.mongodb.repository.MongoRepository;
public interface UserRepository extends MongoRepository<User, String> {
// 自定义查询方法
User findByName(String name);
// 可以定义其他自定义查询方法
}
?
5. 编写服务层和控制器
在服务层(Service)和控制器(Controller)中使用 UserRepository
进行数据操作。
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);
}
}
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);
}
}
?
6. 运行应用程序
编写完成后,启动 Spring Boot 应用程序,然后通过rest接口进行访问测试。
?
MongoDB是一个强大而灵活的NoSQL数据库,通过Java驱动程序,我们可以轻松地连接、操作和管理MongoDB数据库。本文介绍了MongoDB的安装过程,并演示了使用Java与MongoDB进行简单交互的实例。希望这些内容能帮助大家学习和使用MongoDB。
?