在本教程中,我们将展示如何在 Java 中使用 MongoDB。
MongoDB 是 NoSQL 跨平台的面向文档的数据库。 它是可用的最受欢迎的数据库之一。 MongoDB 由 MongoDB Inc.开发,并作为免费和开源软件发布。
MongoDB 中的记录是一个文档,它是由字段和值对组成的数据结构。 MongoDB 文档与 JSON 对象相似。 字段的值可以包括其他文档,数组和文档数组。 MongoDB 将文档存储在集合中。 集合类似于关系数据库中的表以及行中的文档。
安装 MongoDB
以下命令可用于在基于 Debian 的 Linux 上安装 MongoDB。
该命令将安装 MongoDB 随附的必要软件包。
使用sudo service mongodb status
命令,我们检查mongodb
服务器的状态。
mongodb
服务器由sudo service mongodb start
命令启动。
建立数据库
mongo
工具是 MongoDB 的交互式 JavaScript Shell 界面,它为系统管理员提供了一个界面,并为开发人员提供了一种直接测试数据库查询和操作的方法。
我们创建一个testdb
数据库,并在cars
集合中插入八个文档。
Java MongoDB 驱动程序
我们使用以下 Maven 声明在项目中包括 MongoDB Java 驱动程序。
它是一个多功能的 JAR,它嵌入了核心驱动程序和 BSON。 BSON 是 Binaryary JSON 的缩写,是类似于 JSON 的文档的二进制编码的序列化。
Java MongoDB 列出数据库集合
第一个示例连接到testdb
数据库并检索其集合。
pom.xml
这是我们的pom.xml
文件。
com/zetcode/MongoListCollections.java
该示例连接到testdb
数据库并检索其所有集合。
我们为 MongoDB 设置日志记录级别。 我们仅显示严重错误消息。
MongoClient
类用于连接到 MongoDB 服务器。 它是通过MongoClients.create()
方法调用创建的。 27017 是 MongoDB 服务器侦听的默认端口。
使用getDatabase()
方法,我们检索了testdb
数据库。
listCollectionNames()
方法在testdb
数据库中找到所有集合。
在我们的数据库中,我们有这两个集合。
Java MongoDB 数据库统计
下一个示例连接到testdb
数据库并获取其统计信息。
com/zetcode/MongoCommand.java
该示例连接到testdb
数据库并执行dbstats
命令。 它显示了一些数据库统计信息。
使用runCommand()
方法,执行dbstats
命令。 该命令返回Document
,它表示 MongoDB 文档作为映射。
我们遍历文档的条目。
这是一个示例输出。
Java MongoDB 读取数据
MongoCollection
用于存储从集合返回的 mongo 文档。 MongoCursor
是一个游标,用于遍历数据库查询的结果。 确保在发生异常时将其关闭。
com/zetcode/MongoReadAll.java
在示例中,我们遍历cars
集合的所有数据。
我们使用getCollection()
方法检索cars
集合。
我们遍历集合的文档。 find()
方法查找集合中的所有文档。
这是示例的输出。
Java MongoDB 查询运算符
可以使用 MongoDB 查询运算符(例如$gt
,$lt
或$ne
)过滤数据。 可以在BasicDBObject
类中指定查询运算符。
com/zetcode/MongoReadGreaterThan.java
该示例打印汽车价格大于 30,000 的所有文档。
我们使用$gt
查询运算符。
forEach()
方法是一种语法糖,可以避免应用代码担心不必手动关闭游标。 使用toJson()
方法以 JSON 格式打印数据。
这是 JSON 格式的示例输出。 仅包括价格超过 30,000 的汽车。
Java MongoDB 工厂过滤器查询方法
Java MongoDB 驱动程序包含查询过滤器的工厂方法。
com/zetcode/MongoFilter.java
在示例中,我们检索价格在 20,000 到 50,000 之间的汽车。
and()
,gt()
和lt()
是工厂过滤方法。 此外,数据使用sort()
方法排序。
This is the output of the example.
Java MongoDB 投影
Projections
类为所有 MongoDB 投影运算符提供了静态工厂方法。 默认情况下,将投影每个文档的所有字段。 我们可以使用include
和exclude()
方法来确定应将哪些字段投影到我们的输出中。
com/zetcode/MongoProjection.java
该示例从输出中排除_id
字段。
projection()
方法设置一个文档,该文档描述要为所有匹配的文档返回的字段。 excludeId()
是exclude("_id")
的同义词。
这是示例的输出。
Java MongoDB 限制数据输出
limit
查询选项指定要返回的文档数量,skip()
选项指定某些文档。
com/zetcode/MongoSkipLimit.java
该示例从testdb.cars
集合中读取,跳过前两个文档,并将输出限制为五个文档。
FindIterable's
skip()
方法跳过前两个文档,limit()
方法将输出限制为五个文档。
在这里,我们使用 Java 8 构造来打印文档。
This is the output of the example.
Java MongoDB 创建集合
MongoDatabase's
createCollection()
方法在数据库中创建一个新集合。 MongoCollection's
insertMany()
方法将一个或多个文档插入到集合中。
com/zetcode/MongoCreateCollection.java
该示例创建一个cars
集合并将 9 个文档插入其中。
使用createCollection()
方法创建一个新集合。 如果该集合已经存在,则将其删除。
使用getCollection()
方法创建文档的MongoCollection
。
创建一个新的Document
。 它包含有关汽车的信息,包括其 ID,名称和价格。
使用insertMany()
方法将文档写入集合。
Java MongoDB 从 JSON 创建集合
JSON
类具有用于解析 JSON 文档的方法。 JSON (JavaScript 对象表示法)是一种轻量级的数据交换格式。 人类易于阅读和书写。
com/zetcode/MongoCollectionFromJSON.java
该示例从 JSON 数据创建continents
集合。
JSON 数据使用BasicDBObject.parse
方法进行解析。
BasicDBObject
传递到Document
,并通过insertOne()
方法插入到集合中。
我们用mongo
显示创建的集合。
Java MongoDB 修改文件
MongoCollection's
deleteOne()
方法用于删除文档,updateOne()
用于更新文档。
com/zetcode/MongoModify.java
该示例删除包含 Skoda 的文档并更新 Audi 的价格。
deleteOne()
删除Skoda
的文档。 eq()
创建一个与所有文档匹配的过滤器,其中字段名称的值等于指定的值。
通过updateOne()
方法将 Audi 的价格更改为 52,000。
我们使用mongo
工具确认更改。