简介
MongoDB 是一个基于文档的 NoSQL 数据库,由 MongoDB Inc. 开发。
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
MongoDB 的设计理念是为了应对大数据量、高性能和灵活性需求。
MongoDB使用集合(Collections)来组织文档(Documents),每个文档都是由键值对组成的。
-
数据库(Database):存储数据的容器,类似于关系型数据库中的数据库。
-
集合(Collection):数据库中的一个集合,类似于关系型数据库中的表。
-
文档(Document):集合中的一个数据记录,类似于关系型数据库中的行(row),以 BSON 格式存储。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成,文档类似于 JSON 对象,字段值可以包含其他文档,数组及文档数组:
安装MongoDB
服务器:mongodb-windows-x86_64-8.0.6-signed.msi
Download MongoDB Community Server | MongoDB
命令行客户端 :mongosh-2.5.0-win32-x64.zip
MongoDB Shell Download | MongoDB
图形客户端:mongodb-compass-1.39.3-win32-x64.exe
MongoDB Compass Download (GUI) | MongoDB
使用mongosh
启动 MongoDB Shell:
在命令行中输入 mongosh 命令,启动 MongoDB Shell,如果 MongoDB 服务器运行在本地默认端口(27017),则可以直接连接。
mongosh
连接到 MongoDB 服务器:
如果 MongoDB 服务器运行在非默认端口或者远程服务器上,可以使用以下命令连接:
mongosh --host <hostname>:<port>
其中 <hostname>
是 MongoDB 服务器的主机名或 IP 地址,<port>
是 MongoDB 服务器的端口号。
执行基本操作:
连接成功后,可以执行各种 MongoDB 数据库操作。例如:
-
查看当前数据库:
db
-
显示数据库列表:
show dbs
-
切换到指定数据库:
use <database_name>
-
执行查询操作:
db.<collection_name>.find()
-
插入文档:
db.<collection_name>.insertOne({ ... })
-
更新文档:
db.<collection_name>.updateOne({ ... })
-
删除文档:
db.<collection_name>.deleteOne({ ... })
-
退出 MongoDB Shell:
quit()
或者exit
使用mongodb-compass
整合SpringBoot
引入MongoDB依赖:
<!-- Spring Boot Starter Data MongoDB -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
添加远程连接配置:
#MongoDB连接配置
spring.data.mongodb.uri=mongodb://localhost:27017/chat_memory_db
CRUD测试
创建实体类:映射MongoDB中的文档(相当与MySQL的表)
package com.atguigu.java.ai.langchain4j.bean;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document("chat_messages")
public class ChatMessages {
//唯一标识,映射到 MongoDB 文档的 _id 字段
@Id
private ObjectId messageId;
//private Long messageId;
private String content; //存储当前聊天记录列表的json字符串
}
创建测试类:
只要在pom文件中引入MongoDB的依赖并且在配置文件中配置了MongoDB的连接,就可以直接在需要使用MonggoDB的地方注入MongoTemplate。
@SpringBootTest
public class MongoCrudTest {
@Autowired
private MongoTemplate mongoTemplate;
/**
* 插入文档
*/
/* @Test
public void testInsert() {
mongoTemplate.insert(new ChatMessages(1L, "聊天记录"));
}*/
/**
* 插入文档
*/
@Test
public void testInsert2() {
ChatMessages chatMessages = new ChatMessages();
chatMessages.setContent("聊天记录列表");
mongoTemplate.insert(chatMessages);
}
/**
* 根据id查询文档
*/
@Test
public void testFindById() {
ChatMessages chatMessages = mongoTemplate.findById("6801ead733ba9c4a0d9b6c7b", ChatMessages.class);
System.out.println(chatMessages);
}
/**
* 修改文档
*/
@Test
public void testUpdate() {
Criteria criteria = Criteria.where("_id").is("6801ead733ba9c4a0d9b6c7b");
Query query = new Query(criteria);
Update update = new Update();
update.set("content", "新的聊天记录列表");
//修改或新增
mongoTemplate.upsert(query, update, ChatMessages.class);
}
/**
* 新增或修改文档
*/
@Test
public void testUpdate2() {
Criteria criteria = Criteria.where("_id").is("100");
Query query = new Query(criteria);
Update update = new Update();
update.set("content", "新的聊天记录列表");
//修改或新增
mongoTemplate.upsert(query, update, ChatMessages.class);
}
/**
* 删除文档
*/
@Test
public void testDelete() {
Criteria criteria = Criteria.where("_id").is("100");
Query query = new Query(criteria);
mongoTemplate.remove(query, ChatMessages.class);
}
}
当在测试类测试插入一个文档时:
/**
* 插入文档
*/
@Test
public void testInsert2() {
ChatMessages chatMessages = new ChatMessages();
chatMessages.setContent("聊天记录列表");
mongoTemplate.insert(chatMessages);
}
可以在图形化界面看到插入成功了。
以上就是对非关系型数据库-MongoDB的快速上手使用了。