MongoDB

作者:烨竹

MongoDB简介:

MongoDB是功能最像关系型数据库的一种基于分布式文件存储的非关系型数据库。它的数据保存在磁盘上(使用文档方式存储数据),而且数据格式为bson格式(json)。对于MongoDB数据库支持海量数据存储并且读写速度比较快

简单理解:
1、非关系型数据库(nosql):对于非关系型数据库大多都是以key-value方式存储数据并且保存数据位置一般为内存或者磁盘;非关系型数据库大多都不支持事物(弱支持)并且非关系型数据库大多可扩展能力比较强
关系与非关系型数据库区别在于表与表之间的区别,理解为关系型数据库可以进行连表操作,而非关系型数据库不能连表


2、读写速度快
由于在mongodb中存在一种内存映射机制因此导致读写速度比较快;
在写入数据时,先将数据写入内存中,一旦内存写入完成,就告知客户端已经完成数据写入。但是本质还没有完成,后期自行将内存中的数据转移到磁盘中
在查询数据时 mongodb会讲热点数据保存到内存中
其次导致读写速度快的原因是因为会占用较高的存储空间(空间换时时间)

MongoDB特性:
1、读写速度快
MongoDB与MySQL速度对比


2、支持读写分离
自带主从复制功能实现读写分离
3、支持分布式存储
自带分片功能;该功能就可以实现分布式存储
4、安全性高
由于MongoDB是非关系型数据库。没有SQL语句

MongoDB应用场景

适用场景:
持久化缓存层
高效的实时性
用于对象及json数据的存储
高伸缩性的场景
大尺寸,低价值的数据存储(数据量比较大但是数据的价值比较低可以容许有丢失)

不适用场景:
要求高度事务性的系统。
传统的商业智能应用
复杂多表查询

MongoDB安装

windows下安装mongodb
下载网址:https://www.mongodb.com/download-center/community
安装网址:https://blog.csdn.net/ztx114/article/details/78326573
简单的建立用户权限:https://blog.csdn.net/qq_27093465/article/details/54599535
开启php扩展:去https://pecl.php.net/package/mongodb/1.2.9/windows下载相对应的版本;解压php_mongodb.dll文件到php的etc目录,在php.ini添加extension=php_mongodb.dll,重启服务器在phpinfo中查看即可

linux下安装mongodb
1.1 配置包管理器(yum)
新建/etc/yum.repos.d/mongodb-org-3.4.repo文件,方便我们使用yum安装mongodb。

sudo vim /etc/yum.repos.d/mongodb-org-3.4.repo

写入下面的内容

[mongodb-org-3.4]

name=MongoDB Repository

baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/

gpgcheck=1

enabled=1

gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

1.2 安装mongodb

sudo yum install -y mongodb-org

1.3 运行mongodb

禁用SELinux

sudo vim /etc/selinux/config

将SELINUX设为disabled
SELINUX=disabled

开启mongodb防火墙 firewall

sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent

sudo firewall-cmd --reload

sudo firewall-cmd --zone=public --list-all

注销绑定ip

sudo vim /etc/mongod.conf

将bindIp那行注释掉

启动mongodb

sudo systemctl start mongod.service

开机启动

sudo systemctl enable mongod.service

进行下面操作:

安装完成

1.4 、mongodb中的权限

简单理解:
在mongodb的2版本中用户可以划分为两种角色, 一种为超级管理员另外一种为普通管理员。
对于每一种管理员本质就是每一个数据库的管理员(mongodb中每一个数据库都可以设置不同的管理)。只是超级管理员比较特殊是属于一个”隐藏”的admin数据库

MongoDB认证流程
MongoDB没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。
切换到admin数据库,添加的账号才是管理员账号
用户只能在用户所在数据库登录,包括超级管理员账号
超级管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以

①、相关语法

添加管理员
语法:db.createUser(用户名,密码,是否只读)
在使用过程中一定要注意当前所在的数据库。当前在哪一个数据库下执行该操作表示给该数据库增加用户。如果是在admin数据库下增加表示增加超级管理员

添加超级管理员:
db.createUser(
  {
    user: "admin",
    pwd: "123456",
    roles:
    [
      {
        role: "root",
        db: "admin"
      }
    ]
  }
)
添加管理员:
db.createUser(
  {
    user: "root",
    pwd: "123456",
    roles:
    [
      {
        role: "userAdminAnyDatabase",
        db: "admin"
      }
    ]
  }
)
然后退出,再用admin登录,创建其他用户,给予dbOwner的权限,可以对某个数据库进行所有操作:
mongo [ip]/admin -u admin -p admin
 
 
use [db_name]
 
db.createUser(
  {
    user: "[user]",
    pwd: "[password]",
    roles:
    [
      {
        role: "dbOwner",
        db: "[db_name]"
      }
    ]
  }
)
认证权限:db.auth("root","123456")
修改用户权限
db.updateUser( "yezhu",
               {
               "roles" : [
                {
                        "role" : "read",
                        "db" : "mydb"
                }   
               ]
              }
            )
修改用户密码
db.changeUserPassword('aliang','abc123'); 

②、实现用户权限
添加管理员账号

>  mongo
> use admin                     #切换到admin数据库
> db.system.users.find();      #用户表没有数据
> show users;
> db.createUser(               #创建管理员账号admin
    {
    user:"root",
    pwd:"123456",
    roles:[{role:"userAdminAnyDatabase",db:"admin"}]
    }
    )

开启权限验证
开启认证,需重启生效(我的这个版本不需要修改配置文件加上auth=true参数)

> show dbs                  #显示所有数据库失败,还没认证  
2017-11-30T22:47:12.341+0800 E QUERY    [thread1] Error: listDatabases failed:{
        "ok" : 0,
        "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
        "code" : 13,
        "codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:781:19
shellHelper@src/mongo/shell/utils.js:671:15
@(shellhelp2):1:1


> use admin        //切换到admin数据库  
switched to db admin  
> db.auth('root','123456');   //在admin数据库认证成功  
1  
> show dbs
admin  0.000GB
local  0.000GB

添加普通用户

> use mydb      //创建mydb数据库
switched to db mydb
#创建aliang用户
> db.createUser(
   {
     user: "yezhu",
     pwd: "123456",
     roles: [ { role: "readWrite", db: "mydb" } ]
   }
)

> db.auth('yezhu','123456')   #认证成功
1

1.5、安装mongodb-php扩展
下载:https://github.com/keyesone66/windowscs-mongodb.git

用xftp上传
解压:tar xvzf mongodb--1.4.4.tgz

编译安装
cd mongodb--1.4.4
phpize
./configure --with-php-config=/usr/bin/php-config
make && make install

在php.ini文件中添加extension=mongo.so
extension=mongo.so

重启php-fpm或服务器
systemctl restart php-fpm

查看phpinfo
 curl 127.0.0.1/phpinfo.php|grep mongo

显示如下:

MongoDB使用

进入数据库:mongo
查看帮助:help
查看数据库帮助db.help()
选择或者创建数据库:use 数据库名称
创建集合:显示创建db.createCollection('集合名称')
隐式创建 db.集合名称.insert({})



查看集合:show tables show collections
查看数据库:show dbs show databases
删除集合:db.删除的集合名称.drop()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容