学习MongoDB:快速掌握使用方法

介绍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开发之旅完美无缺!

数据库标签