查看原文
其他

MongoDB使用实际很简单

风中纸鹞 脚本之家 2021-06-29

脚本之家

你与百万开发者在一起

作者 | 风中纸鹞

出品 | 脚本之家(ID:jb51net)

MongoDB是个文档型数据库,虽然前有CouchDB夹击,后有MySQL 8.x文档支持的追赶,但是丝毫不影响它在市场中占据的份额。

前言

最近有个开发妹子跟我说MongoDB的操作好复杂,先是跟以往关系型数据库的操作不一样,后是在Windows上操作实在是各种烦心和不容易。于是,花了点时间写了个爱心版的教程。
总体而言,MongoDB的操作并不算多么复杂,只是没有理解它的作用还有就是用错了平台。像MongoDB这样的数据库还是使用Linux比较妥当,直接几个命令就解决了。还有,开发最好还是用Mac,比较省心。
闲话不说,还是从头开始说起,一步步起来,大概20分钟就上路了。

环境搭建

既然要使用MongoDB自然离不开环境的搭建,对于Linux的源可以选择:

  • 官方, http://repo.mongodb.org/

  • 阿里云, http://mirrors.aliyun.com/mongodb/

而要下载的是二进制的版本,对于Windows其对应的地址为 https://www.mongodb.org/dl/win32/,而Linux为 https://www.mongodb.org/dl/linux/x86_64。进去下载你需要的版本就好。
这里选择下载的是Windows的3.x版本。下载完成后,解压到你喜欢的1个地方,接着为了方便操作,打算文本编辑器,写2个启动脚本。省的每次都手动输入一大段参数。

Windows启动脚本

创建1个 start.bat的批处理脚本,其内容如下:

@echo off
SET PATH=%PATH%;D:Program FilesMongoDBServer.6in
mongod -f db.conf

其中PATH这部分后面,将它替换为你实际解压的目录中。其中,在命令mongod中使用选项 -f指定对应的配置文件,省的每次都要手动在命令行中指定参数。而MongoDB是支持YAML格式的配置的,而这里还是以INI的格式来配置参数。
而配置文件中内容如下:

dbpath=D:/mongodb-database
logappend=true
port=27017
bind_ip=127.0.0.1

其中dbpath指定了MongoDB中数据库的路径。默认情况下是当前解压目录盘符下data目录,如果对应目录不存在或不为空,直接就是闪退,无法启动数据库程序了。
之后的logappend用于日志的追加输出,至于port和bind_ip自然是监听的端口和地址了。

Windows停止脚本

既然编写了1个启动脚本,无妨也写1个bat脚本用于停止数据库服务器,其内容如下:

@echo off
SET PATH=%PATH%;D:Program FilesMongoDBServer.6in
mongo mongod_stop.js

唯一的区别是最后1行,使用的是mongo程序,后面紧着着1个js文件。而在对应 mongod_stop.js中内容如下:

  1. db = connect("localhost:27017/admin");

  2. db.shutdownServer();

  3. quit();

而这段代码的意义就是连接到对应的admin数据库中,调用其shutdownServer方法关闭服务器,最后退出程序。当然,这里并没有设置对应的认证信息。而在本地环境上,即使使用createUser设置了认证方式,也是不起效的。详情可以查看 https://docs.mongodb.com/manual/reference/method/db.createUser/#local-database
对于远程服务器,则必须添加权限认证,否则任何人都可以访问你的数据库服务器了。而对应的方式如下所示。

权限认证

要进入需要认证的数据库中,需要调用 db.createUser创建用户,例如:

  1. db.createUser({user:"test",pwd:"123456",roles:[{role:"readWrite",db:"test"}]})

这里创建了1个test的用户,密码为123456。该用户属于的角色为readWrite组,分配的数据库为test。
之后可以通过如下的语句进行权限认证:

  1. db.auth({user:"test",pwd:"123456"})

更多内容可以访问 https://docs.mongodb.com/manual/reference/method/db.createUser/

MongoDB概念

MongoDB数据库中概念,实际上中没有多少东西。排开什么分片、地理索引等附加内容外,唯一的东西应该就是文档了。然而,它这里的文档与我们常见的文本格式还是有区别的。
在MongoDB中的文档格式就是类似1个JSON的格式,比如:

  1. {

  2. "name": "张三",

  3. "age": 20,

  4. "sex": "男"

  5. }

而对应的关系型数据库中表的概念是根本不存在的,但是我们可以将上述这样1个文档看成是关系型数据库中的1张表。而其中的name、age以及sex字段看成是关系型数据库的列字段。当然二者并不是等价的。
而为了能存储上述的内容,我们需要创建1个文档,比如将它命名为1个 user.json的文件。然而在MongoDB中这样1个文件可以将其看成是关系型数据库中的数据库名称。
简单的说,就是类似下表所示的关系:

关系型数据库MongoDB
数据库文档名称
文档内容
文档字段

至于索引什么的,基本上一般数据库都会提供,这属于数据压缩及信息论范畴中的内容了,就不展开说明了。

MongoDB操作

实际上,MongoDB中的指令操作与MySQL很类似,比如查看数据库的操作为:

show databases;

而查看有哪些数据表,使用的是 show collections而不是 show tables。但是MongoDB中提供了1个 show tbs
需要注意的是,在MongoDB中采用了1种延缓加载机制,只有存在数据才生成文档。换句话说,只有往某个文档中插入了数据才会生成对应的集合(关系型数据库中的表),否则你查看数据表中是获取不到对应期望的结果的。
而对于查询操作,可以使用如下的语法:

db.表名.find() #方法一
db.表名.find({"字段":"值"}) #方法二

对于方法一,等同于 select*from表名,而对于后者等同于 select*from表名where字段=
另1个很有用的技巧就是,默认输出的文档是没有格式处理的,为了方便查看效果,常常需要使用格式化输出,此时可以在选择后追加1个pretty方法,即:

db.表名.find().pretty()

如果实在不知道该调用什么方法,可以使用help方法来查看,即:

db.表名.help()
db.help()

之后MongoDB会将内置js中的内容输出。
最后是CRUD对应的方法:

  • insert,插入

  • remove,删除

  • update,更新

  • find,查询

这样,基本上MongoDB就算入门了。更多的内容,还是等到需要的时候再慢慢摸索吧。

参考:

https://www.cnblogs.com/gy-ph/p/7725172.html

本文作者:风中纸鹞,1个多年滚打于Web开发的研发工程师。熟悉PHP、Java、C++等编程语言,以编程作为乐趣。

声明:本文为 脚本之家专栏作者 投稿,未经允许请勿转载。

写的不错?赞赏一下

长按扫码赞赏我

●  黑客是怎么知道你的密码的

●  脚本之家粉丝福利,请查看!

●  地球程序员之神:没上过大学,曾拒盖茨的Offer,4代码农靠他吃饭

● 入行AI,程序员为什么要学习NLP?

●  五款主流Linux发行版性能对比,不求最强但求稳

小贴士

返回 上一级 搜索“Java 女程序员 大数据 留言送书 运维 算法 Chrome 黑客 Python JavaScript 人工智能 女朋友 MySQL 书籍 等关键词获取相关文章推荐。

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存