自学大数据第14天NoSQL~MongoDB及其命令

Posted CodeMartain

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自学大数据第14天NoSQL~MongoDB及其命令相关的知识,希望对你有一定的参考价值。

这几天主要是看了一下mongodb的一些知识,网上也有一些教程,今天主要是复习一下mongodb

启动mongodb

在连接mongodb前首先要创建数据存放目录与日志存放目录,还得保证当前用户对这两个目录有相应的读写操作

mongod --dbpath=/usr/local/mongodb/data/db/ --logpath=/usr/lcoal/mongodb/data/logs/mongodb.log --logappend --bind_ip=0.0.0.0 --port=27017

这时候是以非守护进程模式运行mongodb,我们退出后mongodb也会退出;

  • –fork:在基于 Unix 的系统中,使用 fork 创建服务器进程,将 MongoDB 服务作为守护进程运行。如果指定了 --fork,则必须同时指定 --logpath。
  • –dbpath:指定存放 MongoDB 数据的目录,启动服务时必须指定。
  • –logpath:默认日志是打印在命令行中的,使用该选项指定日志输出的文件。如果对此目录有写权限且文件不存在,则会自动创建该文件。如果日志文件已经存在,默认会覆盖掉该文件,并删除所有旧的日志。如果希望保留旧的日志,除了使用
    –logpath 之外,还应该使用 --logappend 选项。

使用 --fork命令后启动

连接mongodb

使用mongosh连接mongodb


默认连接到的是test库

创建一个数据库

use databasename

当有这个库的时候就会切换到这个库,没有则创建一个库并切换到该库


当我们刚创建一个空的库时,我们使用查看命令是查看不到该库的,只有库中有数据时才会显示出来;

创建集合

有了库,我们在库中创建集合:
创建集合两种方式:

  • 1,通过使用创建集合函数的方式
db.createCollection('gavinlim',capped:true,autoIndexId:true,size:102400,max:10000)

这种方式会指定一些参数:

  • capped~容量是否固定
  • autoIndexId~是否有主键
  • size~分配空间大小
  • max~最大数据数量

查看容量是否固定

  • 2.直接插入数据的方式
db.gpl.insert('name':'gavin','age':29)

这种插入数据的方式,如果有集合,则向该集合插入数据,如果没有该集合,则创建该集合并插入数据

查看集合

查看集合中的数据

db.gpl.find()

在最新版本中已经移除了save方法

关于主键是否有必要自己创建而不用mongodb给出的方案的问题:

我们使用insert的方式创建的集合,会默认使用主键

_id: ObjectId("642d6c8a0f471b266387e6f5")

如果不需要使用mongodb通过的主键方式,那么索引就成了一个问题,需要在创建索引,

我们在创建集合时故意不指定autoIndexId,但是在插入数据时还是生成了一个_id,这说明monggodb不建议自定义主键,(如果使用自定义主键,那么可能需要修改配置文件吧)

MongoDB中的主键是什么?

在MongoDB中,_id字段是集合的主键,以便可以在集合中唯一地标识每个文档。_id字段包含唯一的Object ID 值。

默认情况下,在集合中插入文档时,如果您没有在字段名称中添加带有_id的字段名称,则MongoDB将自动添加一个Object id字段

自定义主键

如果要确保在创建集合时MongoDB不会创建_id字段,并且要指定自己的ID作为集合的_id,则需要在创建集合时明确定义它。

在显式创建id字段时,需要使用名称中的_id创建它。

如下面的方式:

hadoop> db.code.insert(_id:001,'name':'Bob','age':27)
 acknowledged: true, insertedIds:  '0': 1  
hadoop> db.code.find()
[  _id: 1, name: 'Bob', age: 27  ]


建了这么多集合和数据库,我们试着删除他们:

删除数据库和集合

删除集合

#db.collectionname.drop()

db.gavin.drop()

删除数据库

db.dropDatabase()

有一点小发现,我们删除数据库了,这只意味着删除了数据库中的集合,我们在创建数据库(同名)的时候会提示

already on db hadoop


这里暂且不去管他

到这里,或许我们就大致理解了mongodb的模型了:

我们对比一下关系型数据库Mysql:

  • mongodb中数据库对应mysql中数据库
  • mongodb中集合对应mysql中一张张表;

monggodb中存储的数据结构比较松散,不像mysql中那样一但定下来就步容易修改了;

如果插入数据相同会出现什么情况?

在没有指定自定义主键的情况下:


可以看到由于主键不同,素以可以正常插入
我们插入自定义的主键:

可以发现报错了;

MongoDb中的选择器

选择器主要用于加快数据的操作效率

学习选择器我们以update()函数为例子

  1. $set

插入数据:

修改数据:

hadoop> db.gpl.update('name':'Bob',$set:'name':'Jobs')

  acknowledged: true,
  insertedId: null,
  matchedCount: 1,
  modifiedCount: 1,
  upsertedCount: 0



有多条数据时,只会修改第一条匹配的数(如果未指定修改多条数据的情况下)

$inc

针对数值做运算的

db.gpl.update('name':'Bob',$inc:'age':10)

其他选择器:

孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库

孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库

(完整学习过程屏幕记录视频地址在文末)

今天是学习mongoDB数据库的第二天。仍然感觉付出的时间与收获完全不成正比,万事开头的时候,总是那么困难,不过今天历尽困难总算还是成功在本地连接上了远端的mongoDB数据库(就是我注册的官方的试用版本的数据库,就在官方网站服务器上。)

一、首先在官方网站为我注册的账号新建的项目【Clusters0】中添加了一个测试数据库(database),命名空间为:ghlhfirst
(具体添加过程不是很复杂,但要通过文字描述又比较有难度,而且最开始要找到这个添加过程还着实花了我不少时间,具体看我的操作录屏,链接在文末)
同样的,我可以很方便的在这个数据库中,添加一个集合,我命名为【ghlhone】
与firebase一样在集合中,我可以添加多个文档(document)对象。在文档中我也可以添加记录,一个文档的记录可以由多个字典样式的key:value格式组合的成的内容。这些都与之前学习的firebase数据库一模一样。
但今天没有研究在文档(document)中是否还可以添加下一层级的集合。
(具体看我的操作录屏,链接在文末)

二、然后是下载安装compass本地客户端
下载后的compass本地客户端的文件名是:
mongodb-compass-community-1.16.3-win32-x64.exe
直接点击安装,允许杀毒软件放行即可安装完成,桌面上会有快捷方式,而且安装过程非常快,可能只花了几秒钟时间,然而下载这个文件要花不少时间,受制于网络的影响。

客户端的使用我找到了几个网络上的教程:
一个是官方教程:
https://resources.mongodb.com/getting-started-with-mongodb/getting-started-with-python-and-mongodb
一个是百度经验上有同修者放有经验:
https://jingyan.baidu.com/article/f96699bb0bb760894f3c1b63.html

我严格参照此教程进行连接,反复尝试。
然而,却屡屡失败,反复提示:
Cannot reach any nodes for set Cluster0-shard-0. Please check network connectivity and the status of the set.

对compass起始界面上的参数也进行了反复的修改,不断尝试,花了近几个小时,然而还是不能连接上。
(我的详细操作过程,参见我的屏幕录屏,因为反复尝试次数过多,进行了剪辑,显得没有尝试几次,事实上进行了数百次的尝试。)

就暂时放弃了,转而研究它的命令行客户端【Mongo Shell】
这种通过windows的命令行客户端连接远程服务器的方法。

三、又尝试进行命令行客户端【Mongo Shell】的安装并连接
(一)、首先下载了这个客户端,下载得到的文件是:
mongodb-shell-win32-x86_64-2008plus-ssl-4.0.4.zip
因为是zip格式的压缩文件,看来不用安装 ,于是我解压了它,只得到了一个文件:
mongo.exe
此处与上面提到的百度经验中的经验文章中的教程都不再一致了,我只好进行尝试,将这个文件放到了系统盘的windows目录中,然而打开windows的命令行窗口进行验证安装是否成功:
输入的命令是:
C:Userspw>mongo --version
MongoDB shell version v4.0.4
git version: f288a3bdf201007f3693c58e140056adf8b04839
allocator: tcmalloc
modules: none
build environment:
distmod: 2008plus-ssl
distarch: x86_64
target_arch: x86_64


根据显示的内容来看,居然可以成功执行,当然此处也有可能是我之前已经安装了compass客户端,所以本来就已经安装了了shell版本的客户端。

(二)然后我找到了我的shell版本的连接字符命令行命令:
mongo "mongodb+srv://cluster0-zr7xj.mongodb.net/test" --username ghlh

考虑到我自己建立的第一个数据库的命名空间是:【ghlhfirst】
于是我将其修改为再到windows的cmd命令中去执行如下:
mongo "mongodb+srv://cluster0-zr7xj.mongodb.net/ghlhfirst" --username ghlh
不料出现与compass客户端同样的问题:
Cannot reach any nodes for set Cluster0-shard-0. Please check network connectivity and the status of the set.
在此又花了大量时间,终于后来明白了,是网络访问受阻,经过反复测试,花去大量宝贵的时间之后,终于在shell命令下连接上了:
C:Userspw>mongo "mongodb+srv://cluster0-zr7xj.mongodb.net/ghlhfirst" --username ghlh
MongoDB shell version v4.0.4
Enter password:
connecting to: mongodb+srv://cluster0-zr7xj.mongodb.net/ghlhfirst
2019-01-01T17:38:59.961+0800 I NETWORK [js] Starting new replica set monitor for Cluster0-shard-0/cluster0-shard-00-00-zr7xj.mongodb.net.:27017,cluster0-shard-00-01-zr7xj.mongodb.net.:27017,cluster0-shard-00-02-zr7xj.mongodb.net.:27017
2019-01-01T17:39:01.002+0800 I NETWORK [js] Successfully connected to cluster0-shard-00-00-zr7xj.mongodb.net.:27017 (1 connections now open to cluster0-shard-00-00-zr7xj.mongodb.net.:27017 with a 5 second timeout)
2019-01-01T17:39:01.034+0800 I NETWORK [ReplicaSetMonitor-TaskExecutor] Successfully connected to cluster0-shard-00-01-zr7xj.mongodb.net.:27017 (1 connections now open to cluster0-shard-00-01-zr7xj.mongodb.net.:27017 with a 5 second timeout)
2019-01-01T17:39:01.243+0800 I NETWORK [js] changing hosts to Cluster0-shard-0/cluster0-shard-00-00-zr7xj.mongodb.net:27017,cluster0-shard-00-01-zr7xj.mongodb.net:27017,cluster0-shard-00-02-zr7xj.mongodb.net:27017 from Cluster0-shard-0/cluster0-shard-00-00-zr7xj.mongodb.net.:27017,cluster0-shard-00-01-zr7xj.mongodb.net.:27017,cluster0-shard-00-02-zr7xj.mongodb.net.:27017
2019-01-01T17:39:02.266+0800 I NETWORK [js] Successfully connected to cluster0-shard-00-00-zr7xj.mongodb.net:27017 (1 connections now open to cluster0-shard-00-00-zr7xj.mongodb.net:27017 with a 5 second timeout)
Implicit session: session { "id" : UUID("54f31aff-fe89-4189-b68e-c637916bd71b") }
MongoDB server version: 4.0.4
Error while trying to show server startup warnings: user is not allowed to do action [getLog] on [admin.]
MongoDB Enterprise Cluster0-shard-0:PRIMARY>
然后证实通过compass客户端也可以连接上了。

三、对mongoDB连接命令的理解:
(一)
"mongodb+srv://cluster0-zr7xj.mongodb.net/ghlhfirst"
命令参数的第一部分其实是自己的数据库的地址,个规模一个域名的形式。
(二)
--username ghlh
表示:当前连接数据库的授权用户名

而授权用户对应的密码,会在cmd命令窗口中,单独提示输入。
输入密码是不会有任何字符显示的,只管输入完成后点击【Enter】即可。

由于今天花费了太多时间与服务器访问上,还没有进行Python语句连接到mongoDB的测试。

——————————
今天整理的学习笔记完成,最后例行说明下我的自学思路:
根据过去多年我自学各种编程语言的经历,认为只有真正体验式,解决实际问题式的学习才会有真正的效果,即让学习实际发生。在2004年的时候我开始在一个乡村小学自学电脑 并学习vb6编程语言,没有学习同伴,也没有高师在上,甚至电脑都是孤岛(乡村那时还没有网络),有的只是一本旧书,在痛苦的自学摸索中,我找到适应自己零基础的学习方法:首先是每读书的一小节就作相应的手写笔记,第二步就是上机测试每一个笔记内容是否实现,其中会发现书中讲的其实有出入或错误,第三步就是在上机测试之后,将笔记改为电子版,形成最终的修订好的正确无误的学习笔记 。
通过反复尝试错误,在那个没有分享与交流的黑暗时期我摸黑学会了VB6,尔后接触了其它语言,也曾听过付费视频课程,结果发现也许自己学历果然太低,就算是零基础的入门课程,其实也难以跟上进度,讲师的教学多数出现对初学者的实际情况并不了解的情况,况且学习者的个体也存在差异呢?当然更可怕的是收费课程的价格往往是自己难以承受的。
于是我的所有编程学习都改为了自学,继续自己的三步学习笔记法的学习之路。
当然自学的最大问题是会走那么多的弯路,没有导师直接输入式的教学来得直接,好在网络给我们带来无限搜索的机会,大家在网络上的学习日志带给我们共享交流的机会,而QQ群等交流平台、网络社区的成立,我们可以一起自学,互相批评交流,也可以获得更有效,更自主的自学成果。
于是我以人生已过半的年龄,决定继续我的编程自学之路,开始学习python,只希望与大家共同交流,一个人的独行是可怕的,只有一群人的共同前进才是有希望的。
诚挚期待您的交流分享批评指点!欢迎联系我加入从零开始的自学联盟。
这个时代互联网成为了一种基础设施的存在,于是本来在孤独学习之路上的我们变得不再孤独,因为网络就是一个新的客厅,我们时刻都可以进行沙龙活动。
非常乐意能与大家一起交流自己自学心得和发现,更希望大家能够对我学习过程中的错误给予指点——是的,这样我就能有许多免费的高师了——这也是分享时代,社区时代带来的好福利,我相信大家会的,是吧!

根据完全共享的精神,开源互助的理念,我的个人自学录制过程是全部按4K高清视频录制的,从手写笔记到验证手写笔记的上机操作过程全程录制,但因为4K高清文件太大均超过5G以上,所以无法上传至网络,如有需要可联系我QQ578652607对传,乐意分享。上传分享到百度网盘的只是压缩后的720P的视频。

我的学习过程录像百度盘地址分享如下:(清晰度:1280x720)

链接:https://pan.baidu.com/s/1vuDr039cVG0Mj0zsFv5gCg
提取码:e6tp

Bilibili:
https://www.bilibili.com/video/av39680803/

喜马拉雅语音笔记:
https://www.ximalaya.com/keji/19103006/149597379








































































以上是关于自学大数据第14天NoSQL~MongoDB及其命令的主要内容,如果未能解决你的问题,请参考以下文章

孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库

孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库

精心打磨,京东云发布MongoDB正式版

mongodb的作品目录

孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5

闭关修炼180天----吐血整理MongoDB的学习笔记