返回介绍

6.1 MongoDB 简介

发布于 2025-04-22 19:57:18 字数 4020 浏览 0 评论 0 收藏

MongoDB 是一个文档存储数据库。文档是结构化的数据(基本上就是 Map),可包含基本类型值、集合值,甚至可将内嵌文档作为给定键的值。MongoDB 以 BSON 格式来存储这些文档,它是衍生于 JSON 的二进制格式。示例的文档如示例 6-1 所示。

示例 6-1 MongoDB 的文档样例

c0601

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 发布包

c0602

要启动 MongoDB,必须先建一个目录来存储数据然后使用 mongod 命令启动,并将它指向刚才建立的目录(见示例 6-3)。

示例 6-3 准备以及启动 MongoDB

c0603-1

c0603-2

如你所见,MongoDB 已启动并使用指定的路径来存储数据,现在正在等待连接。

6.1.2 使用 MongoDB Shell

我们接着通过 MongoDB Shell 来了解最基本的操作。切换到刚刚解压 MongoDB 的目录并且使用 mongo 命令来运行 Shell,如示例 6-4 所示。

示例 6-4 启动 MongoDB Shell

c0604

Shell 将连接本地运行的 MongoDB 实例。可以使用 show dbs 命令来查看目前这个实例中所有可用的数据库。在示例 6-5 中,选择“local”数据库并执行 show collecions 命令,目前为止我们的数据库还是空的,因此它没有显示任何数据。

示例 6-5 选择数据库并且查看集合

c0605

现在在数据库中增加一些数据,通过使用 save(…)命令来存储我们所选择的集合,并且把相关的数据组成 JSON 格式输入到方法中。在示例 6-6 中增加了两个客户,也就是 Dave 和 Carter。

示例 6-6 将数据插入到 MongoDB

c0606

命令中 customers 部分指明了数据所要存储到的集合,如果集合尚未存在的话,会立即创建。注意增加 Carter 时并没有包含 E-mail 地址,这就意味着文档中可以包含不同的属性组合。在默认情况下,MongoDB 不会强制使用模式(schema)。事实上,find(…) 命令可接受 JSON 文档作为输入来创建查询。如果要查找 E-mail 地址为 dave@dmband.com 的客户,Shell 的交互过程如示例 6-7 所示。

示例 6-7 在 MongoDB 中查询数据

c0607

可以在 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 实例

c0608

如同访问关系型数据库时所使用 DataSource 抽象一样,它看起来很像典型的基础设施代码,你可能会希望 Spring 能够在一定程度上对其进行管理。除此之外,实例化 Mongo 对象或随后使用 DBCollection 均有可能抛出异常,但是这些异常属于 MongoDB 特有的,不应该侵入到客户端代码中。Spring Data MongoDB 会通过一些基础设施的抽象以及 Spring 命名空间来与 Spring 进行基本的集成从而进一步简化配置。关于这个问题请查阅 6.2 小节“使用 Spring 命名空间搭建基础设施”。

驱动的核心数据抽象是 DBObject 接口及其 BaseicDBObject 实现类。它的用法基本上与简单的 Java Map 一样,如示例 6-9 所示。

示例 6-9 使用 Java 驱动创建 MongoDB 文档

c0609-1

c0609-2

首先,我们创建最终会成为嵌套文档的 address 数据,并且把它封装到列表中。然后构造出基本的 customer 文档,最后设置复杂的 addresses 属性。你可能已经意识到了,与存储数据的交互非常底层,如果要持久化 Java 领域对象,必须手动将它们与 BaseicDBObjects 进行映射。稍后我们将会看到如何使用 Spring Data MongoDB 来改善这个状况。刚才创建的文档可以通过 DBCollection 对象进行存储,如示例 6-10 所示。

示例 6-10 使用 MongoDB Java 驱动持久化文档

c0610

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。