介绍MongoDB
在当今数据越来越重要的背景下,数据处理技术日新月异。对于开发人员来说,可扩展性和性能一直是关注的焦点。在这一方面,一种非关系型数据库MongoDB应运而生。MongoDB是一种面向文档的数据库,它存储的是文档对象而不是行,列或表,允许我们轻松地存储和查询复杂的数据结构。
安装MongoDB
在Windows中安装MongoDB
首先,我们需要去MongoDB官网https://www.mongodb.com/zh-cn下载MongoDB的安装文件。选择下载最新版本或者根据自己的需要选择合适版本。然后,我们运行安装程序,MongoDB默认会安装到C:\ProgramFiles\MongoDB\Server\{version}中。如果我们想手动安装,可以通过命令行安装。
> mkdir -p /data/db
> "C:\Program Files\MongoDB\Server\{version}\bin\mongod.exe"
这里的/data/db是我们设置的有效数据文件夹路径,我们可以在启动mongod.exe之前修改该路径。建议将其放在根目录下,因为在Windows中访问根目录可能需要管理员权限。我们还可以通过mongod.exe --dbpath 参数指定数据文件夹路径。
在Mac中安装MongoDB
在Mac中,我们可以使用Homebrew来安装MongoDB,也可以从MongoDB官网下载二进制文件压缩包进行安装。
> brew update
> brew install mongodb
这里MongoDB会默认安装在/usr/local/Cellar/mongodb目录中,Mac的Homebrew会为我们处理一些注册表方面的问题,同时也反馈了默认的MongoDB安装位置。我们还需新建数据文件夹并启动mongod进程。
> mkdir -p /data/db
> mongod
连接到数据库
MongoDB提供了Java、.NET、Ruby和各种其他语言的驱动程序,使得与数据库的连接变得容易且流畅。我们可以从MongoDB的官方网站下载各种驱动程序。
在Java代码中,如何连接到MongoDB?
// In Java
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("myMongoDB");
首先,我们在Java中实例化一个MongoClient对象,指定我们MongoDB运行的主机和端口。在这个例子中,我们默认使用了本地MongoDB服务器,端口号为27017。其次,我们用MongoClient对象获取数据库的实例,这里传入的是我们的数据库名"myMongoDB"参数。我们也可以在进入MongoDB shell之后通过命令查找mongodb服务运行的端口。
> show dbs
> use myMongoDB
> db
myMongoDB>
文档模型
在MongoDB中,我们将数据存储在文档中。文档是MongoDB中的基本单位,类似于关系型数据库中的行。MongoDB中的文档是一个BSON对象。BSON,即Binary JSON,是一种轻量级的交换格式,基于JSON,但添加了数据类型和二进制支持,使其更容易提供应用程序适用的扩展。
以下示例是一个文档的样例:
{
"_id" : ObjectId("5f50fbf7f864f9636aa04562"),
"title" : "MongoDB介绍",
"description" : "MongoDB是一个非关系型数据库。",
"by" : "dev_guy",
"likes" : 10,
"comments" : [
{
"user" : "user1",
"message" : "你写得很好!",
"date" : ISODate("2020-09-03T04:14:00Z"),
"like" : 3
},
{
"user" : "user2",
"message" : "太棒了,继续努力",
"date" : ISODate("2020-09-02T04:14:00Z"),
"like" : 4
}
]
}
这是一个包含id、title、description、by、likes和comments的文档。comments字段是一个数组类型,包含两个文档。每个评论文档包含user、message, date和like这四个字段。
插入文档
向MongoDB插入数据,我们通过使用insertOne和insertMany方法。insertOne用于插入一条文档,insertMany用于插入多条文档,它们都接受一个BSON类型的文档对象作为参数,该方法会返回一个InsertOneResult或InsertManyResult对象,分别代表插入一个或多个文档的结果。
以下示例演示了如何插入一条文档到myMongoDB的logs集合中:
// In Java
MongoCollection<Document> collection = database.getCollection("logs");
Document doc = new Document("name", "dev_guy")
.append("title", "MongoDB 教程")
.append("description", "MongoDB 是一个 NoSQL 数据库")
.append("url", "http://www.runoob.com")
.append("by", "菜鸟教程");
collection.insertOne(doc);
这里,我们建立一个MongoCollection实例表示目标集合。然后建立一个Document对象,以其键值对形式插入一个文档。最后,使用MongoCollection的insertOne方法将文档插入到集合中。
查询文档
MongoDB查询文档的语法格式如下:
db.collection.find(query, projection)
query:可选项,用于筛选要查询的数据的条件。
projection:可选项,用于指定返回文档中所需的字段。
查询所有文档
以下示例演示了如何查询数据库中的所有文档:
// In Java
MongoCollection<Document> collection = database.getCollection("logs");
FindIterable<Document> iterDoc = collection.find();
for(Document doc : iterDoc) {
System.out.println(doc);
}
查询符合条件的文档
在MongoDB中,我们可以使用相等、大于、小于、同时满足多个条件等操作,使用类似于SQL的语法进行查询。
以下示例演示了如何查询title属性为"MongoDB 教程"的文档。
// In Java
MongoCollection<Document> collection = database.getCollection("logs");
BasicDBObject query = new BasicDBObject();
query.put("title", "MongoDB 教程");
FindIterable<Document> iterDoc = collection.find(query);
for(Document doc : iterDoc) {
System.out.println(doc);
}
更新文档
MongoDB中的update命令用于更新文档。
以下示例演示了如何更新数据库中title为"MongoDB 教程"的文档的likes字段值为100:
// In Java
MongoCollection<Document> collection = database.getCollection("logs");
BasicDBObject query = new BasicDBObject();
query.put("title", "MongoDB 教程");
BasicDBObject newDocument = new BasicDBObject();
newDocument.put("likes", 100);
BasicDBObject updateObj = new BasicDBObject();
updateObj.put("$set", newDocument);
collection.updateOne(query, updateObj);
这里,我们首先使用BasicDBObject创建一个查询对象,将查询条件以键值对的形式存入其中。然后,我们创建一个新的BasicDBObject对象,并将"likes"字段赋值为100。接下来,我们创建BasicDBObject对象,$set作为键,将新的BasicDBObject作为值,表示我们需要进行的修改。最后,我们调用updateOne方法,将查询对象和修改对象传入,从而更新logs集合中满足条件的第一个文档。
删除文档
MongoDB中的remove命令用于从集合中删除文档。
以下示例演示了如何删除数据库中title为"MongoDB 教程"的文档:
// In Java
MongoCollection<Document> collection = database.getCollection("logs");
BasicDBObject query = new BasicDBObject();
query.put("title", "MongoDB 教程");
collection.deleteOne(query);
这里,我们首先使用BasicDBObject创建一个查询对象,将查询条件以键值对的形式存入其中。然后,我们调用方法deleteOne,该方法将删除logs集合中满足条件的第一个文档。
总结
这篇文章介绍了MongoDB数据库的基本概念、安装、配置、以及与Java的桥接。我们了解了如何使用Java库的增删改查基本操作,并且使用一组基本的示例代码展示了这些操作。MongoDB可以处理海量数据。希望您的MongoDB开发之旅完美无缺!