MongoDB 入门,我是花了心思的

Wesley13
• 阅读 562

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

MongoDB 入门,我是花了心思的

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

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

01、MongoDB 是什么

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

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

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

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

02、安装 MongoDB

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

MongoDB 入门,我是花了心思的

官网下载地址如下:

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

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

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

MongoDB 入门,我是花了心思的

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

MongoDB 入门,我是花了心思的

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

MongoDB 入门,我是花了心思的

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

MongoDB 入门,我是花了心思的

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

2)MongoDB 的版本号为 4.2.6。

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

MongoDB 入门,我是花了心思的

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

MongoDB 入门,我是花了心思的

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

03、安装 Robo 3T

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

下载地址如下:

https://robomongo.org/download

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

MongoDB 入门,我是花了心思的

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

MongoDB 入门,我是花了心思的

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

MongoDB 入门,我是花了心思的

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

MongoDB 入门,我是花了心思的

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

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

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

是不是感觉和 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 入门,我是花了心思的

06、鸣谢

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

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

------------------

公众号:沉默王二(ID:cmower)
CSDN:沉默王二
这是一个有颜值却靠才华吃饭的程序员,你知道,他的文章风趣幽默,读起来就好像花钱一样爽快。

长按下图二维码关注,你将感受到一个有趣的灵魂,且每篇文章都有干货。

MongoDB 入门,我是花了心思的

------------------

原创不易,莫要白票,如果觉得有点用的话,请毫不留情地转发朋友圈吧,因为这将是我写作更多优质文章的最强动力。

本文分享自微信公众号 - 沉默王二(cmower)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
PPDB:今晚老齐直播
【今晚老齐直播】今晚(本周三晚)20:0021:00小白开始“用”飞桨(https://www.oschina.net/action/visit/ad?id1185)由PPDE(飞桨(https://www.oschina.net/action/visit/ad?id1185)开发者专家计划)成员老齐,为深度学习小白指点迷津。
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这