认识 MongoDB
MongoDB 是一个基于文档的 NoSQL(非关系型)数据库 。它不像 MySQL 那样把数据存在格子状的表里,而是存成类似 JSON 的“文档” 。
1. 核心概念对比
为了方便理解,你可以直接对照你熟悉的 MySQL 来记忆:
| 概念 | MongoDB | MySQL (关系型) | 说明 |
|---|---|---|---|
| 存储容器 | 数据库 (Database) | 数据库 (Database) | 存储数据的总仓库 |
| 数据集合 | 集合 (Collection) | 表 (Table) | 类似 Java 中的类或表结构 |
| 数据记录 | 文档 (Document) | 行 (Row) | 每一条具体的数据记录 |
| 数据标识 | _id | 主键 (Primary Key) | 自动生成的唯一标识符 |
2. 为什么大模型项目(AI)首选 MongoDB?
在你目前的学习路径中,使用 MongoDB 存储聊天记忆主要基于以下原因:
- 极高的灵活性:它不需要预先定义严格的表结构 。这非常适合聊天记录,因为消息内容可能是纯文本、图片链接或者复杂的元数据,MongoDB 能轻松应对这种非结构化数据 。
- 开发效率高:数据以 BSON(二进制 JSON)格式存储,这和 Java 中的对象、Map 结构匹配度极高,存取时不需要写复杂的 SQL 关联查询 。
- 高性能与可扩展性:设计理念就是为了应对大数据量和高性能需求,这对于需要频繁读写对话历史的 AI 应用至关重要 。
3. 基础操作(CRUD)
如果你直接进命令行(或通过 Docker 的 mongosh)操作,最常用的命令如下:
- 插入文档:
db.collection.insertOne({name: "张三", age: 20})。 - 查询文档:
db.collection.find()。 - 更新文档:
db.collection.updateOne({name: "张三"}, {$set: {age: 21}})。 - 删除文档:
db.collection.deleteOne({name: "张三"})。
4. 重点提示
在 LangChain4j 项目中,我们不需要手写这些命令。
- 我们利用 Spring Data MongoDB 提供的
MongoTemplate来进行操作 。 - 你会定义一个 Java 实体类(如
ChatMessages),通过@Document注解将其映射到 MongoDB 的集合中 。