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

相关推荐
背帆8 分钟前
数据转储(go)
数据库·golang
南玖yy1 小时前
解锁 C++26 的未来:从语言标准演进到实战突破
开发语言·数据库·c++·人工智能·c++23·c++基础语法
geekmice1 小时前
通过SpringBoot+H2数据库+Mybatis实现DAO单元测试
数据库·spring boot·mybatis
老年DBA1 小时前
解决 Oracle EXPDP 無法鎖定 NFS 相關錯誤: ORA-27086 & flock: No locks available
数据库·oracle
菜是一种态度1 小时前
PostgreSQL数据库操作SQL
数据库·sql·postgresql
海绵波波1077 小时前
DeepSeek谈《凤凰项目 一个IT运维的传奇故事》
运维·服务器·数据库
邪恶马铃薯8 小时前
SQL常用数据清洗语句
数据库·sql
Sunlight_7779 小时前
第六章 QT基础:9、Qt中数据库的操作
数据库·qt·oracle
凭君语未可10 小时前
详解 MyBatis-Plus 框架中 QueryWrapper 类
数据库·oracle·mybatis
PXM的算法星球11 小时前
Elasticsearch--自带“搜索引擎“的数据库
数据库·elasticsearch·搜索引擎