MongoDB 入门,我是花了心思的

作者 | 沉默王二

责编 | Carol

封图 | CSDN 付费下载自视觉中国

有时候不得不感慨一下,系统升级真的是好处多多,不仅让我有机会重构了之前的烂代码,也满足了我积极好学的虚荣心。你看,Redis 入门了、Elasticsearch 入门了,这次又要入门 MongoDB,感觉自己变秃的同时,也变强大了。

小伙伴们在继续阅读之前,我必须要声明一点,我对 MongoDB 并没有进行很深入的研究,仅仅是因为要用,就学一下。但作为一名负责任的技术博主,我是花了心思的,这篇入门教程,小伙伴们读完后绝对会感到满意,忍不住点赞。

当然了,小伙伴们遇到文章中有错误的地方,不要手下留情,可以组团过来捶我,但要保证一点,不要打脸,我怕毁容。

MongoDB 是什么

MongoDB 是一个基于分布式的文件存储数据库,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。

以上引用来自于官方,不得不说,解释得文绉绉的。那就让我来换一种通俗的说法给小伙伴们解释一下,MongoDB 将数据存储为一个文档(类似于 JSON 对象),数据结构由键值对组成,类似于 Java 中的 Map,通过 key 的方式访问起来效率就高得多,对吧?这也是 MongoDB 最重要的特点。

MongoDB 提供了企业版(功能更强大)和社区版,对于我们开发者来说,拿社区版来学习和使用就足够了。MongoDB 的驱动包很多,常见的编程语言都有覆盖到,比如说 Java、JavaScript、C++、C#、Python 等等。

很多知名的互联网公司都在用 MongoDB,比如说谷歌、Facebook、eBay 等等。总之,值得信赖,小伙伴们放心入门,技多不压身啊,就当是给自己一次学习的机会。

安装 MongoDB

MongoDB 针对不同的操作系统有不同的安装包,我们这篇入门的文章就以 Windows 为例吧。

官网下载地址如下:

https://www.mongodb.com/download-center/community

最新的版本是 4.2.6,我选择的是安装版,msi 格式的,264M 左右。下载完就可以双击运行安装,傻瓜式的。

建议选择「Custom」自定义安装,如下图所示。

以服务模式运行,并配置好数据和日志目录,如下图所示。

建议取消勾选安装 MongoDB 的图形化客户端工具,否则安装速度慢到你想要去扣会手机。

安装完成后进入到 bin 目录下,双击 mongo.exe 文件就可以连接到 MongoDB 服务了。

1)MongoDB 的默认端口号为 27017。

2)MongoDB 的版本号为 4.2.6。

默认会连接到 test 文档(相当于数据),可以通过 db 命令查询。

还可以运行一些简单的算术运算:

那如何停止服务呢?可以直接点击右上角的 X 号——粗暴、壁咚。

安装 Robo 3T

Robo 3T 提供了对 MongoDB 和 SCRAM-SHA-256(升级的 mongo shell)的支持,是一款轻量级的 MongoDB 客户端工具。

下载地址如下:

https://robomongo.org/download

最新的版本是 1.3,选择 zip 格式进行下载,23M 左右。下载完成后,解压就行了。

包目录不再一一解释了,进入 bin 目录下,双击运行 robo3t.exe 文件,启动 Robo 3T 客户端。

点击「Create」创建一个 MongoDB 的连接。

连接成功后,就可以操作 MongoDB 了。

(不过,小伙伴们这时候也不太知道该怎么操作,毕竟 MongoDB 的一些相关概念还不清楚,无从下手啊)

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 的文章),是不是瞬间就清晰了?

在 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");

是不是感觉和 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”数据库,结果如下图所示。

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

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

推荐阅读

  • 一行代码引来的安全漏洞,就让我们丢失了整个服务器的控制权

  • 怒肝 8 个月源码,我成为了 Spring 开源贡献者

  • 读取模式错误,计算引擎操作复杂……面对Hadoop这些问题该如何应对?

  • 从地摊看云计算:规模产业历程大揭秘

  • 这位超级电脑之父,年近九旬仍不愿退休

  • 阿里云科学家入选计算机顶会HPCA名人堂,他是什么来头?

  • 中本聪真的转移了2009年挖出的比特币吗?或许不一定!

真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

码农节快乐|一个系统,高效解决复杂事件采集-计算-实时触达

PartI&#xff1a; 1024 今天是1024&#xff0c;一个特别的数字&#xff0c;比如某网站内容的解压密码通常都是1024&#xff0c;想求一个种子留言也是1024。1024是属于广大程序猿&#xff08;又称码农&#xff09;的节日&#xff0c;在这样一个节日里&#xff0c;各种“黑”程…

SpringBoot集成Myabtis

二、SpringBoot集成Myabtis 2.1. pom 依赖 <!--版本控制-><properties><java.version>1.8</java.version><oracle.version>11.2.0.3</oracle.version><mysql.version>8.0.20</mysql.version></properties><!--Mybat…

DevOps 在移动应用程序开发中扮演什么角色?

作者 | VARUN BHAGAT译者 | 火火酱&#xff0c;责编| Carol封图 | CSDN 付费下载自视觉中国全球智能手机用户数量已经超过30亿。据估计&#xff0c;未来几年用户人数将增加至数亿人。智能手机用户和应用程序下载量的这种稳定增长证明了移动应用程序行业的蓬勃发展。如今在这个技…

她说:行!嫁人就选程序员!

本文的重点是&#xff1a;“为什么年轻漂亮的小姑娘都瞄准了程序员小哥哥”“理发38&#xff1f;太奢侈了&#xff01;淘宝20买套剪刀自己可以用好几年。”“衣服太贵了&#xff0c;我觉得优衣库的那件打折就已经很好了”“上个月的一千块钱的零花钱没花完&#xff0c;这个月先…

数学之美:嵌入式编程凹凸性之妙用(附C代码)

来源 | 嵌入式客栈今天遇到一个网友问一个问题&#xff0c;他有一个传感器测量一个物理量&#xff0c;需要判断其变化趋势&#xff0c;我给了一些建议&#xff0c;这里将这个建议展开做些深入分析&#xff0c;并分享给大家。本文想借此表达一下个人的一个观点&#xff0c;做开发…

从地摊看云计算:规模产业历程大揭秘

作者 | 马超责编 | 夕颜头图 | CSDN下载自视觉中国出品 | CSDN&#xff08;ID:CSDNnews&#xff09; 地摊经济的突然兴起&#xff0c;可能是2020年发生在中国最神奇的一幕了&#xff1a;刚刚还在直播间内直播的带货的企业老板&#xff0c;转眼间又来到地摊来叫卖产品了。当然也…

SpringCloud Gateway 快速入门_01

文章目录一、网关模块搭建1. 引入依赖2. 配置3. 启动类二、产品服务模块搭建2.1. 引入依赖2.2. 配置2.3. 控制层2.4. 启动类2.5. 启动产品模块三、启动中间件3.1. nacos启动3.2. 启动gateway3.3. 配置域名映射四、测试验证4.1. 测试产品服务4.2. 网关访问产品一、网关模块搭建 …

这件事,阿里爱了10年

阿里云双11亿元补贴提前领&#xff0c;进入抽取iPhone 11 Pro&#xff1a;https://www.aliyun.com/1111/2019/home?utm_contentg_1000083110 原文链接 本文为云栖社区原创内容&#xff0c;未经允许不得转载。

程序员!别逼自己买课了,每天花10分钟做这件事,写代码能力暴增......

作为一个教Python10年&#xff0c;带了5万名学生入职一线互联网公司的老师&#xff0c;经常遇到一些学员和我抱怨&#xff1a;看了很多教程&#xff0c;遇到问题不知道怎么寻找解决方案...课上听老师讲案例一听就会&#xff0c;可是一去做相关的练习题就傻了&#xff0c;无从下…

SpringCloud 基于OAth2.0 搭建认证授权中心_02

文章目录一、数据库部分1. 创建数据库2. 初始化数据脚本二、搭建maven父工程认证授权模块2.1. 创建一个maven项目2.2. 引入依赖三、搭建认证授权模块3.1. 创建一个子maven项目3.2. 引入依赖3.3. 增加application.yaml3.4. 增加数据库实体3.5. 增加接口3.6. 增加用户读取实现类3…

Knative Service 是如何指定端口和协议的

如果使用 Knative Serving 部署一个 Nginx 你可能会发现服务起来了&#xff0c;但是无法访问到 Nginx 中的服务。当然这不是 Nginx 的问题&#xff0c;这是因为 Knative 对 Container 的端口有要求。默认 Nginx 的服务端口是 80 &#xff0c;而 Knative Serving queue 8012 默认…

那天我去逛街,发现连大编程语言都摆起地摊了……

作者 | 轩辕之风来源 | 编程技术宇宙&#xff08;ID&#xff1a;xuanyuancoding&#xff09;困难年年有&#xff0c;今年特别多。公司要做一个新的网站&#xff0c;可预算有限&#xff0c;听说为了生计&#xff0c;各大编程语言们都摆起了地摊儿&#xff0c;我决定去瞧瞧&#…

十年磨一剑:从2009启动“去IOE”工程到2019年OceanBase拿下TPC-C世界第一

十年前&#xff08;2009年&#xff09;的9月&#xff0c;我奉命组建当时的淘宝技术保障部&#xff1b;随即启动了2010年的技术预算工作&#xff0c;记得第一次给时任集团首席架构师的王坚博士汇报预算的时候&#xff0c;我得意地说到&#xff1a;“&#xff08;淘宝&#xff09…

SpringCloud Gateway 集成 oauth2 实现统一认证授权_03

文章目录一、网关搭建1. 引入依赖2. 配置文件3. 增加权限管理器4. 自定义认证接口管理类5. 增加网关层的安全配置6. 搭建授权认证中心二、搭建产品服务2.1. 创建boot项目2.2. 引入依赖2.3. controller2.4. 启动类2.5. 配置四、测试验证4.1. 启动nacos4.2. 启动认证中心4.3. 启动…

Knative 健康检查机制分析

从头开发一个 Serverless 引擎并不是一件容易的事情&#xff0c;今天咱们就从 Knative 的健康检查说起。通过健康检查这一个点来看看 Serverless 模式和传统的模式都有哪些不同以及 Knative 针对 Serverless 场景都做了什么思考。 Knative Serving 模块的核心原理如下图所示。下…

【模式识别】探秘分类奥秘:K-近邻算法解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《模式之谜 | 数据奇迹解码》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 目录 &#x1f30c;1 初识模式识…

SpringCloudGateway 集成 nacos 整合实现动态路由_04

接上一篇&#xff1a;SpringCloud Gateway 集成 oauth2 实现统一认证授权 文章目录一、目前存在的问题1. 问题简述2. 集成nacos前配置3. 前言简述二、网关模块改造集成nacos2.1. 引入依赖2.2. 创建bootstrap.yaml2.3. 在nacos配置中心添加配置2.4. 启动服务2.5. 访问产品模块2.…

深度 | 带领国产数据库走向世界,POLARDB底层逻辑是什么?

阿里妹导读&#xff1a;在刚刚结束的乌镇世界互联网大会上&#xff0c;阿里云自主研发的POLARDB云原生数据库当选世界互联网领先科技成果&#xff0c;凭实力站上C位。这个”包管“了北京市每天800万人次的公交出行的下一代分布式数据库到底有多强大&#xff1f;我们请阿里云智能…

QCon演讲|闲鱼从零到千万DAU的应用架构演进

导读:业务架构要随着业务发展做相应的演进,继而支撑业务的快速发展。本文主要通过介绍闲鱼从零发展到千万级DAU应用的不同阶段的业务特点、核心问题以及针对性的架构演进,来阐述业务架构的演进思路与心得。 闲鱼业务背景 技术架构的演进跟业务形态都是强相关的,闲鱼的市场本质…

程序员必修课:为什么非要用Python做数据分析?Excel不好吗?

日本最大的证券公司之一野村证券首席数字官马修汉普森&#xff0c;在Quant Conference上发表讲话&#xff1a;“用Excel的人越来越少&#xff0c;大家都在码Python代码。”甚至直接说&#xff1a;“Python已经取代了Excel。”实际上&#xff0c;Python的应用领域极为广泛&#…