04、MongoDB 的相关概念
随着互联网的极速发展,用户数据也越来越庞大,NoSQL 数据库的发展能够很好地处理这些大的数据,MongoDB 是 NoSQL 数据库中的一个典型的代表。
说到这,可能有些小伙伴们还不知道 NoSQL 是啥意思,我简单解释一下。NoSQL 可不是没有 SQL 的意思,它实际的含义是 Not Only SQL,也就是“不仅仅是 SQL”,指的是非关系型数据库,和传统的关系型数据库 MySQL、Oracle 不同。
MongoDB 命名源于英文单词 humongous,意思是「巨大无比」,可以看得出 MongoDB 的野心。MongoDB 的数据以类似于 JSON 格式的二进制文档存储:
{
name: "沉默王二",
age: 18,
hobbies: ["写作", "敲代码"]
}
在进行下一步之前,需要先来理解 MongoDB 中的几个关键概念,比如说什么是集合,什么是文档,什么是字段等等。MongoDB 虽然是非关系型数据库,但和关系型数据库非常相似。
看完上面这幅图(图片来源于好朋友 macrozheng 的文章),是不是瞬间就清晰了?
05、在 Java 中使用 MongoDB
有些小伙伴可能会问,“二哥,我是一名 Java 程序员,我该如何在 Java 中使用 MongoDB 呢?”这个问题问得好,这就来,这就来。
第一步,在项目中添加 MongoDB 驱动依赖:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>4.0.3</version> </dependency>
第二步,新建测试类 MongoDBTest:
public class MongoDBTest { public static void main(String[] args) { MongoClient mongoClient = MongoClients.create(); MongoDatabase database = mongoClient.getDatabase("mydb"); MongoCollection<Document> collection = database.getCollection("test"); Document doc = new Document("name", "沉默王二") .append("age", "18") .append("hobbies", Arrays.asList("写作", "敲代码")); collection.insertOne(doc); System.out.println("集合大小:" +collection.countDocuments()); Document myDoc = collection.find().first(); System.out.println("文档内容:" + myDoc.toJson()); } }
1)MongoClient 为 MongoDB 提供的客户端连接对象,不指定主机名和端口号的话,默认就是“localhost”和“27017”。
如果小伙伴想自定义主机名和端口号的话,也可以通过字符串的形式:
MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
1
是不是感觉和 MySQL 的连接字符串挺像的?
2)getDatabase() 方法用于获取指定名称的数据库,如果数据库已经存在,则直接返回该 DB 对象(MongoDatabase),否则就创建一个再返回(省去了判空的操作,非常人性化)。
3)getCollection() 方法用于获取指定名称的文档对象,如果文档已经存在,则直接返回该 Document 的集合对象,否则就创建一个再返回(和 getDatabase() 方法类似)。
有了文档对象(MongoCollection)后,就可以往里面添加具体的文档内容了。
Document doc = new Document("name", "沉默王二")
.append("age", "18")
.append("hobbies", Arrays.asList("写作", "敲代码"));
Document 对象来源于 org.bson 包下,可以在实例化该对象之后通过 append() 方法添加对应的键值对,非常方便,就像 String 类的 append() 方法一样。
有了文档对象后,就可以通过 insertOne() 方法将文档添加到集合当中了。
4)countDocuments() 方法用于获取集合中的文档数目。
5)要查询文档,可以通过 find() 方法,它返回一个 FindIterable 对象,first() 方法可以返回当前集合中的第一个文档对象。
好了,来看一下程序的输出结果:
集合大小:1
文档内容:{"_id": {"$oid": "5ebcaa76465cab3f18b93e1a"}, "name": "沉默王二", "age": "18", "hobbies": ["写作", "敲代码"]}
完全符合我们的预期,perfect!
也可以通过 Robo 3T 查看“mydb”数据库,结果如下图所示。
06、鸣谢
好了,我亲爱的小伙伴们,以上就是本文的全部内容了,是不是看完后很想实操一把 MongoDB,赶快行动吧!如果你在学习的过程中遇到了问题,欢迎随时和我交流,虽然我也是个菜鸟,但我有热情啊。
另外,如果你想写入门级别的文章,这篇就是最好的范例。
我是沉默王二,一枚有趣的程序员。如果觉得文章对你有点帮助,请微信搜索「 沉默王二 」第一时间阅读,回复【666】更有我为你精心准备的 500G 高清教学视频(已分门别类)。
本文 GitHub 已经收录,有大厂面试完整考点,欢迎 Star。