快速上手非关系型数据库-MongoDB

简介

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.msiDownload 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依赖:

java 复制代码
<!-- Spring Boot Starter Data MongoDB -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

添加远程连接配置:

java 复制代码
#MongoDB连接配置
spring.data.mongodb.uri=mongodb://localhost:27017/chat_memory_db

CRUD测试

创建实体类:映射MongoDB中的文档(相当与MySQL的表)

java 复制代码
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。

java 复制代码
@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);
    }
}

当在测试类测试插入一个文档时:

java 复制代码
 /**
     * 插入文档
     */
    @Test
    public void testInsert2() {
        ChatMessages chatMessages = new ChatMessages();
        chatMessages.setContent("聊天记录列表");
        mongoTemplate.insert(chatMessages);
    }

可以在图形化界面看到插入成功了。

以上就是对非关系型数据库-MongoDB的快速上手使用了。

相关推荐
十八旬13 小时前
苍穹外卖项目实战(day7-1)-缓存菜品和缓存套餐功能-记录实战教程、问题的解决方法以及完整代码
java·数据库·spring boot·redis·缓存·spring cache
要一起看日出14 小时前
MVCC-多版本并发控制
数据库·mysql·mvcc
Hx__14 小时前
MySQL InnoDB 的 MVCC 机制
数据库·mysql
速易达网络14 小时前
ASP.NET MVC 连接 MySQL 数据库查询示例
数据库·asp.net·mvc
玉衡子14 小时前
MySQL基础架构全面解析
数据库·后端
梦中的天之酒壶14 小时前
Redis Stack扩展功能
数据库·redis·bootstrap
GreatSQL15 小时前
GreatSQL分页查询优化案例实战
数据库
Leo.yuan15 小时前
不同数据仓库模型有什么不同?企业如何选择适合的数据仓库模型?
大数据·数据库·数据仓库·信息可视化·spark
麦兜*15 小时前
MongoDB 6.0 新特性解读:时间序列集合与加密查询
数据库·spring boot·mongodb·spring·spring cloud·系统架构
chat2tomorrow15 小时前
数据采集平台的起源与演进:从ETL到数据复制
大数据·数据库·数据仓库·mysql·低代码·postgresql·etl