mongodb 监听不到端口_MongoDB使用实际很简单

38151889f6d60639584fa17901869e54.png

脚本之家

你与百万开发者在一起

38151889f6d60639584fa17901869e54.png

131c442736a9aeaf3111339c6a2e7402.gif

d601974d1475a82a2032765d00b0026b.png

作者 | 风中纸鹞

出品 | 脚本之家(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中内容如下:

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

db.shutdownServer();

quit();

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

权限认证

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

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

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

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

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

MongoDB概念

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

{

"name": "张三",

"age": 20,

"sex": "男"

}

而对应的关系型数据库中表的概念是根本不存在的,但是我们可以将上述这样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++等编程语言,以编程作为乐趣。

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

写的不错?赞赏一下

76a36ee72d04a017cf5f1349fda73691.png

长按扫码赞赏我

a8c1426b80dd141384002dabf26096be.png

40acb197f513897cbdca866899c587f3.gif

● 6f856242805e99ee9b585b3bbdefc70d.gif 黑客是怎么知道你的密码的

● 6f856242805e99ee9b585b3bbdefc70d.gif 脚本之家粉丝福利,请查看!

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

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

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

d6c1de5bf69e3460acfc8ef6c55074d2.gif

小贴士

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值