MongoDB使用实际很简单


MongoDB使用实际很简单

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


分享到:


相關文章: