前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB安装与应用 原

MongoDB安装与应用 原

作者头像
阿dai学长
发布2019-04-03 10:33:07
5770
发布2019-04-03 10:33:07
举报
文章被收录于专栏:阿dai_linux阿dai_linux

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安装。

安装准备

代码语言:javascript
复制
[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

即,安装包创建完成!

安装

代码语言:javascript
复制
[root@adailinux ~]# yum install -y mongodb-org  

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

21.28 连接MongoDB

MongoDB配置文件

代码语言:javascript
复制
[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

代码语言:javascript
复制
[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

代码语言:javascript
复制
[root@adailinux ~]# mongo
>

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

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

代码语言:javascript
复制
[root@adailinux ~]# mongo -uusername -p'passwd' --authenticationDatabase dbname

21.29 MongoDB用户管理

代码语言:javascript
复制
[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"

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

代码语言:javascript
复制
[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:

代码语言:javascript
复制
[root@adailinux ~]# mongo --host 127.0.0.1 --port 27017 -u"admin" -p"admin122" --authenticationDatabase "admin"

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

应用

代码语言:javascript
复制
> 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 (可选)指定封顶集合允许在文件的最大数量。
代码语言:javascript
复制
[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({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017/10/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 21.26 MongoDB介绍
    • 非关系型数据库和关系型数据库对比
      • 关系型数据库数据结构
      • MongoDB数据结构
  • 21.27 MongoDB安装
    • 安装准备
      • 安装
      • 21.28 连接MongoDB
        • MongoDB配置文件
          • 启动MongoDB
            • 连接MongoDB
            • 21.29 MongoDB用户管理
              • 应用
                • 常用操作
                  • MongoDB用户角色(roles)
                  • 21.30 MongoDB创建集合&&数据管理
                    • 创建集合
                    相关产品与服务
                    云数据库 MongoDB
                    腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档