快速上手非关系型数据库-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的快速上手使用了。

相关推荐
云和数据.ChenGuang17 小时前
达梦数据库的命名空间
数据库·oracle
三三木木七18 小时前
mysql拒绝连接
数据库·mysql
蹦跶的小羊羔18 小时前
sql数据库语法
数据库·sql
唐古乌梁海18 小时前
【mysql】InnoDB的聚簇索引和非聚簇索引工作原理
数据库·mysql
我变秃了也没变强18 小时前
pgsql配置密码复杂度策略
数据库·postgresql
PawSQL18 小时前
企业级SQL审核工具PawSQL介绍(1) - 六大核心能力
数据库·sql·oracle
幼稚园的山代王18 小时前
NoSQL介绍
数据库·nosql
猫林老师18 小时前
HarmonyOS线程模型与性能优化实战
数据库·分布式·harmonyos
沃达德软件18 小时前
视频图像数据库基础服务
数据库·图像处理·人工智能·计算机视觉·视觉检测
派可数据BI可视化18 小时前
商业智能BI 浅谈数据孤岛和数据分析的发展
大数据·数据库·数据仓库·信息可视化·数据挖掘·数据分析