专栏首页阿dai_linuxMongoDB安装与应用 原

MongoDB安装与应用 原

21.26 MongoDB介绍

  • 官网 www.mongodb.com, 当前最新版3.4
  • 文档型数据库
  • C++编写,基于分布式的,属于NoSQL的一种
  • 在NoSQL中是最像关系型数据库的
  • MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档、数组及文档数组。
  • 关于JSON http://www.w3school.com.cn/json/index.asp
  • 因为基于分布式,所以很容易扩展

非关系型数据库和关系型数据库对比

关系型数据库数据结构

MongoDB数据结构

21.27 MongoDB安装

epel自带2.6版本的MongoDB,在此安装MongoDB v3.4,方法如下: 官方安装文档: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

基本思路:创建一个最新版本MongoDB的yum源,然后yum安装。

安装准备

[root@adailinux ~]# cd /etc/yum.repos.d/

[root@adailinux yum.repos.d]# vim 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

[root@adailinux yum.repos.d]# yum list |grep mongodb
mongodb-org.x86_64                        3.4.9-1.el7                  mongodb-org-3.4
mongodb-org-mongos.x86_64                 3.4.9-1.el7                  mongodb-org-3.4
mongodb-org-server.x86_64                 3.4.9-1.el7                  mongodb-org-3.4
mongodb-org-shell.x86_64                  3.4.9-1.el7                  mongodb-org-3.4
mongodb-org-tools.x86_64                  3.4.9-1.el7                  mongodb-org-3.4

即,安装包创建完成!

安装

[root@adailinux ~]# yum install -y mongodb-org  

这样就安装好了,需要等待较长时间,耐心…

21.28 连接MongoDB

MongoDB配置文件

[root@adailinux ~]# vim /etc/mongod.conf
# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# Where and how to store data.
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true

# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,192.168.8.131  
# Listen to local interface only, comment to listen on all interfaces.
##绑定多个IP时用逗号分隔

#security:
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options
#auditLog:
#snmp:

启动MongoDB

[root@adailinux ~]# systemctl start mongod

[root@adailinux ~]# ps aux |grep mongod
mongod    9258  1.8  7.2 972188 35752 ?        Sl   18:16   0:00 /usr/bin/mongod -f /etc/mongod.conf
[root@adailinux ~]# netstat -lntp |grep mongo
tcp        0      0 192.168.8.131:27017     0.0.0.0:*               LISTEN      9258/mongod

启动完成!

连接MongoDB

[root@adailinux ~]# mongo
>

如果不是监听本地IP和27017端口的话需要指定IP和端口: --port : 指定端口 --host : 指定IP

如果设置了密码,则在连接时需要指定用户名和密码:

[root@adailinux ~]# mongo -uusername -p'passwd' --authenticationDatabase dbname

21.29 MongoDB用户管理

[root@adailinux ~]# mongo
切换到admin库:
> use admin
switched to db admin

创建用户并设定密码:
> db.createUser( { user: "admin", customData: {description: "superuser"}, pwd: "admin122", roles: [ { role: "root", db: "admin" } ] } )
##用户名:admin;密码:admin122
##user指定用户,customData为说明字段,可以省略,pwd为密码,roles指定用户的角色,db指定库名 

列出所有用户:
> db.system.users.find()
##执行此操作前必须先切换到admin库  

查看当前库下所有用户:
> show users

删除用户:
> db.createUser({user:"adai",pwd:"123456",roles:[{role:"read",db:"testdb"}]})
##先添加一个用户
> show users
	"_id" : "admin.adai",
	"_id" : "admin.admin",
删除:
> db.dropUser('adai')
true
> show users;
	"_id" : "admin.admin"

如果要用户生效,还需要编辑启动脚本:

[root@adailinux ~]# vim /usr/lib/systemd/system/mongod.service
Environment="OPTIONS=--auth -f /etc/mongod.conf"
#在options后面添加--auth参数  

重载服务:
[root@adailinux ~]# systemctl daemon-reload
[root@adailinux ~]# systemctl restart mongod

[root@adailinux ~]# ps aux |grep mongod
mongod    9535 19.0  7.1 971164 35264 ?        Sl   18:46   0:00 /usr/bin/mongod --auth -f /etc/mongod.conf

再次连接MongoDB:

[root@adailinux ~]# mongo --host 127.0.0.1 --port 27017 -u"admin" -p"admin122" --authenticationDatabase "admin"

注意: 创建用户的时候要针对一个库,登录的时候也需要指定对应的库。

应用

> db.createUser( { user: "test1", pwd: "123aaa", roles: [ { role: "readWrite", db: "db1" }, {role: "read", db: "db2" } ] } )
#test1用户对db1库读写,对db2库只读。
#之所以先use db1,表示用户在 db1 库中创建,就一定要db1库验证身份,即用户的信息跟随随数据库。
#比如上述 test1虽然有 db2 库的读取权限,但是一定要先在db1库进行身份验证,直接访问会提示验证失败。

认证:
> db.auth('test1','123aaa')
1
##在哪个库下创建的用户就在哪个库进行认证操作

认证完成之后就可以使用相应的库了:
> use db2

常用操作

  • db.version() //查看版本
  • use userdb //如果库存在就切换,不存在就创建
  • show dbs //查看库,此时userdb并没有出现,这是因为该库是空的,还没有任何集合,只需要创建一个集合就能看到了
  • db.createCollection('clo1') //创建集合clo1,在当前库下面创建
  • db.dropDatabase() //删除当前库,要想删除某个库,必须切换到那个库下
  • db.stats() //查看当前库的信息
  • db.serverStatus() //查看mongodb服务器的状态

MongoDB用户角色(roles)

  • Read:允许用户读取指定数据库
  • readWrite:允许用户读写指定数据库
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  • userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
  • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  • root:只在admin数据库中可用。超级账号,超级权限

21.30 MongoDB创建集合&&数据管理

创建集合

语法: db.createCollection(name,options)

  • name就是集合的名字
  • options可选,用来配置集合的参数,参数如下:
    • capped true/false (可选)如果为true,则启用封顶集合。封顶集合是固定大小的集合,当它达到其最大大小,会自动覆盖最早的条目。如果指定true,则也需要指定尺寸参数。
    • autoindexID true/false (可选)如果为true,自动创建索引_id字段的默认值是false。
    • size (可选)指定最大大小字节封顶集合。如果封顶如果是 true,那么你还需要指定这个字段。单位B
    • max (可选)指定封顶集合允许在文件的最大数量。
[root@adailinux ~]# mongo --host 127.0.0.1 --port 27017 -u"admin" -p"admin122" --authenticationDatabase "admin"
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017/
MongoDB server version: 3.4.9
> use db1
switched to db db1

创建集合:
> db.createCollection("mycol", { capped : true, size : 6142800, max : 10000 } )
{ "ok" : 1 }

查看集合:
> show tables
mycol
> show collections
mycol

向集合中插入数据:
> db.Account.insert({AccountID:1,UserName:"adai",password:"123456"})
WriteResult({ "nInserted" : 1 })
##如果集合不存在,直接插入数据,则mongodb会自动创建集合

更新:
> db.Account.update({AccountID:1},{"$set":{"Age":20}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

查看所有文档:
> db.Account.find()
{ "_id" : ObjectId("59d4c22add463fc263361e3b"), "AccountID" : 1, "UserName" : "adai", "password" : "123456", "Age" : 20 }

根据条件查看文档:
> db.Account.find({AccountID:1})

根据条件删除文档:
> db.Account.remove({AccountID:1})
WriteResult({ "nRemoved" : 1 })

删除所有文档:
> db.Account.drop()
true

查看集合状态:
> db.printCollectionStats()
##前提是先进入一个文档use dbname  

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 搭建LVS-DR负载均衡集群、Keepalived-LVS高可用负载均衡集群

    在浏览器访问VIP:192.168.8.100,刷新网页,访问结果由real1、real2交替回复。

    阿dai学长
  • 分发系统——expect 原

    (adsbygoogle = window.adsbygoogle || []).push({});

    阿dai学长
  • for循环、while循环、continue、break、exit解析、select用法

    如果不手动停止该脚本,它会一直循环执行(按Ctrl+c结束),实际环境中配合screen使用。

    阿dai学长
  • Vapor奇幻之旅(08 连接服务端MongoDB)

    首先付上官网的安装教程:安装mongodb,这个是社区版,由于企业版是收费的,就先来个社区版以供测试使用。

    Leacode
  • 10个使用 Foundation 框架开发的WordPress 主题推荐

    上一篇文章介绍了《Foundation:高级的响应式前端框架》,今天则介绍10个使用 Foundation 框架开发的WordPress 主题,对于想研究 Fo...

    Jeff
  • 从图灵机开始

    说到图灵机,我们首先要说说图灵这个人。笔者觉得我们这种搞计算机的人都应该知道并记得这个人。 图灵,1912年6月23日生于英国帕丁顿。是数学家、密码破译专家,当...

    企鹅号小编
  • 主流数据库分页SQL语句

    sql语句分页,不同的数据库下的分页方案各不一样,下面是主流的三种数据库的分页sql:

    用户2192970
  • python开发_xml.etree.ElementTree_XML文件操作_该模块在操作XML数据是存在安全隐患_慎用

    xml.etree.ElementTree模块实现了一个简单而有效的用户解析和创建XML数据的API。

    Hongten
  • 去除重复数据

    有两个意义上的重复记录,一是完全重复的记录,也即所有字段均都重复,二是部分字段重复的记录。对于第一种重复,比较容易解决,只需在查询语句中使用distinct关键...

    用户1148526
  • 爬虫 (七) 必须掌握的基础概念 (四)

    理论上所有的响应头信息都应该是回应请求头的。但是服务端为了效率,安全,还有其他方面的考虑,会添加相对应的响应头信息,从上图可以看到:

    公众号---人生代码

扫码关注云+社区

领取腾讯云代金券