我以为我对MongoDB十分了解,直到我遇到了字节面试官(2)

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 MongoDB,通用型 2核4GB
简介: 我以为我对MongoDB十分了解,直到我遇到了字节面试官(1)

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 虽然是非关系型数据库,但和关系型数据库非常相似。


image.png


看完上面这幅图(图片来源于好朋友 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”数据库,结果如下图所示。


image.png


06、鸣谢


好了,我亲爱的小伙伴们,以上就是本文的全部内容了,是不是看完后很想实操一把 MongoDB,赶快行动吧!如果你在学习的过程中遇到了问题,欢迎随时和我交流,虽然我也是个菜鸟,但我有热情啊。


另外,如果你想写入门级别的文章,这篇就是最好的范例。


我是沉默王二,一枚有趣的程序员。如果觉得文章对你有点帮助,请微信搜索「 沉默王二 」第一时间阅读,回复【666】更有我为你精心准备的 500G 高清教学视频(已分门别类)。


本文 GitHub 已经收录,有大厂面试完整考点,欢迎 Star。


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
4月前
|
算法
字节面试官让我讲讲最小生成树,我忍不住笑了
字节面试官让我讲讲最小生成树,我忍不住笑了
|
4月前
|
前端开发 JavaScript 安全
【前端面试字节ts的手写题】建议收藏!!!
【前端面试字节ts的手写题】建议收藏!!!
53 0
|
17天前
|
存储 安全 Java
面试题:用过ThreadLocal吗?ThreadLocal是在哪个包下的?看过ThreadLocal源码吗?讲一下ThreadLocal的get和put是怎么实现的?
字节面试题:用过ThreadLocal吗?ThreadLocal是在哪个包下的?看过ThreadLocal源码吗?讲一下ThreadLocal的get和put是怎么实现的?
30 0
|
6天前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
125 8
Python与NoSQL数据库(MongoDB、Redis等)面试问答
|
4月前
|
算法 Java 程序员
火爆Boss直聘的2023最牛字节Java面试手册!助你狂拿千份offer!
当下程序员现状 根据一些调查报告,可以了解到当下程序员的现状。 首先,从年龄分布来看,年轻的程序员占据了主导地位。 30岁以下的开发者占比最高,为81%,而40岁以上的开发者仅占3%。 这意味着,程序员这个行业在一定程度上是年轻化的,同时也面临着一些中年转行或者技术更新换代的问题。 在性别方面,男性程序员的比例在90%以上,女性程序员的比例较低。 这可能和传统观念中将程序员视为男性职业有关。然而,随着技术的普及和女性对计算机科学的兴趣逐渐提高,女性程序员的比例也在逐渐增加。 从职业发展来看,程序员的职业发展相对较慢。 虽然程序员的薪资普遍较高,但是工作压力也很大,需要不断学习和更
89 0
|
16天前
|
存储 NoSQL 关系型数据库
MongoDB面试题
MongoDB面试题
|
4月前
|
NoSQL 应用服务中间件 MongoDB
2023年底复盘之大厂必问面试题:Redis+MongoDB+ZK+Nginx+数据库
今天分享给大家的都是目前主流企业使用最高频的面试题库,也都是 Java 版本升级之后,重新整理归纳的最新答案,会让面试者少走很多不必要的弯路。同时每个专题都做到了详尽的面试解析文档,以确保每个阶段的读者都能看得懂,同时这部分面试文档也是可以免费的提供给有需要的同学们学习的,有需要的可以查看文末的获取方式!
|
4月前
|
Java 关系型数据库 应用服务中间件
阿里最新春招面经,腾讯/美团/字节1万道Java中高级面试题
又是一年过去了,职场的积雪还没有消融,又迎来了一次大考。疫情还没完全过去,大家强打起精神,相互问好致意,眼角却满是疲惫...
|
4月前
|
算法 Java
记十次面试字节/美团失败总结的《520道LeetCode题Java版答案》
去字节、美团、BAT等大厂面试,刷LeetCode上的数据结构+算法题是必修课。许多读者说,刷题的时候经常会遇到困难,想要找一本答案题解做参考。
|
4月前
|
算法 程序员
凭借左程云(左神)的这份 “程序员代码面试指南”我入职了字节
左程云,本科就读于华中科技大学、硕士毕业于在芝加哥大学。先后在IBM、百度、GrowingIO和亚马逊工作,是一个刷题7年的算法爱好者,也是马士兵教育的算法授课老师。2014年起专职做程序员算法和数据结构培训,代码面试培训,刷题交流等相关工作。