- 内容提要
- 序
- 前言
- 第一部分 背景知识
- 第 1 章 Spring Data 项目
- 第 2 章 Repository:便利的数据访问层
- 第 3 章 使用 Querydsl 实现类型安全的查询
- 第二部分 关系型数据库
- 第 4 章 JPA Repository
- 第 5 章 借助 Querydsl SQL 实现类型安全的 JDBC 编程
- 第三部分 NoSQL
- 第 6 章 MongoDB: 文档存储
- 第 7 章 Neo4j:图数据库
- 第 8 章 Redis:键/值存储
- 第四部分 快速应用开发
- 第 9 章 使用 Spring Roo 实现持久层
- 第 10 章 REST Repository 导出器
- 第五部分 大数据
- 第 11 章 Spring for Apache Hadoop
- 第 12 章 使用 Hadoop 分析数据
- 第 13 章 使用 Spring Batch 和 Spring Integration 创建大数据管道
- 第六部分 数据网格
- 第 14 章 分布式数据网格:GemFire
- 关于封面
6.1 MongoDB 简介
MongoDB 是一个文档存储数据库。文档是结构化的数据(基本上就是 Map),可包含基本类型值、集合值,甚至可将内嵌文档作为给定键的值。MongoDB 以 BSON 格式来存储这些文档,它是衍生于 JSON 的二进制格式。示例的文档如示例 6-1 所示。
示例 6-1 MongoDB 的文档样例
firstname 和 lastname 都是基本类型 String 值,address 字段是一个数组值,包含一个嵌套的地址文档。文档(Documents)通过集合(Collection)组织在一起,而集合是一组文档的容器。通常会在单个集合中保存相同类型的文档,在这里,类型(type)的本质含义是“类似的结构”。从 Java 的观点来看,通常意味着每种类型(Customer 为一个,Product 也为一个)或每种类型层级(有一个集合保存 Contact,它可以是 Person 也可以是 Company)会有一个集合。
6.1.1 设置 MongoDB
开始使用 MongoDB 之前,可以先从项目网站( http://www.mongodb.org/downloads )将其下载下来。它提供了 Windows、OS X、Linux 和 Solaris 的二进制版本以及源码。最简单的方式是下载二进制包并将它们解压缩到适当的硬盘目录之中,如示例 6-2 所示。
示例 6-2 下载并解压 MongoDB 发布包
要启动 MongoDB,必须先建一个目录来存储数据然后使用 mongod 命令启动,并将它指向刚才建立的目录(见示例 6-3)。
示例 6-3 准备以及启动 MongoDB
如你所见,MongoDB 已启动并使用指定的路径来存储数据,现在正在等待连接。
6.1.2 使用 MongoDB Shell
我们接着通过 MongoDB Shell 来了解最基本的操作。切换到刚刚解压 MongoDB 的目录并且使用 mongo 命令来运行 Shell,如示例 6-4 所示。
示例 6-4 启动 MongoDB Shell
Shell 将连接本地运行的 MongoDB 实例。可以使用 show dbs 命令来查看目前这个实例中所有可用的数据库。在示例 6-5 中,选择“local”数据库并执行 show collecions 命令,目前为止我们的数据库还是空的,因此它没有显示任何数据。
示例 6-5 选择数据库并且查看集合
现在在数据库中增加一些数据,通过使用 save(…)命令来存储我们所选择的集合,并且把相关的数据组成 JSON 格式输入到方法中。在示例 6-6 中增加了两个客户,也就是 Dave 和 Carter。
示例 6-6 将数据插入到 MongoDB
命令中 customers 部分指明了数据所要存储到的集合,如果集合尚未存在的话,会立即创建。注意增加 Carter 时并没有包含 E-mail 地址,这就意味着文档中可以包含不同的属性组合。在默认情况下,MongoDB 不会强制使用模式(schema)。事实上,find(…) 命令可接受 JSON 文档作为输入来创建查询。如果要查找 E-mail 地址为 dave@dmband.com 的客户,Shell 的交互过程如示例 6-7 所示。
示例 6-7 在 MongoDB 中查询数据
可以在 MongoDB 的首页( htpp://www.mongodb.org/display/DOCS/Tutorial )找到更多使用 MongoDB Shell 的知识。除此之外,[ChoDir10]也是很好的资源,它更进一步探讨了存储的内部原理以及通常如何使用它来进行工作。
6.1.3 MongoDB Java 驱动
若要从 Java 程序中访问 MongoDB,可以选择名为 10gen 的公司所提供并维护的 Java 驱动程序,也是支撑 MongoDB 的公司。它与存储实例交互的核心抽象是 Mongo、Database 和 DBCollection。Mongo 类抽象了到 MongoDB 实例的连接,它的默认构造器会为后续的操作连接一个本地运行的实例。正如你所见,通用的 API 非常简洁易懂,如示例 6-8 所示。
示例 6-8 通过 Java 驱动访问 MongoDB 实例
如同访问关系型数据库时所使用 DataSource 抽象一样,它看起来很像典型的基础设施代码,你可能会希望 Spring 能够在一定程度上对其进行管理。除此之外,实例化 Mongo 对象或随后使用 DBCollection 均有可能抛出异常,但是这些异常属于 MongoDB 特有的,不应该侵入到客户端代码中。Spring Data MongoDB 会通过一些基础设施的抽象以及 Spring 命名空间来与 Spring 进行基本的集成从而进一步简化配置。关于这个问题请查阅 6.2 小节“使用 Spring 命名空间搭建基础设施”。
驱动的核心数据抽象是 DBObject 接口及其 BaseicDBObject 实现类。它的用法基本上与简单的 Java Map 一样,如示例 6-9 所示。
示例 6-9 使用 Java 驱动创建 MongoDB 文档
首先,我们创建最终会成为嵌套文档的 address 数据,并且把它封装到列表中。然后构造出基本的 customer 文档,最后设置复杂的 addresses 属性。你可能已经意识到了,与存储数据的交互非常底层,如果要持久化 Java 领域对象,必须手动将它们与 BaseicDBObjects 进行映射。稍后我们将会看到如何使用 Spring Data MongoDB 来改善这个状况。刚才创建的文档可以通过 DBCollection 对象进行存储,如示例 6-10 所示。
示例 6-10 使用 MongoDB Java 驱动持久化文档
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论