一、MongoDB安装与基本操作

1、linux安装MongoDB

环境准备:

  • linux系统: centos7
  • 安装MongoDB社区版

下载MongoDB Community Server

MongoDB社区版下载地址
在这里插入图片描述

下载MongoDB
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.19.tgz

tar -zxvf mongodb-linux-x86_64-rhel70-4.4.19.tgz

启动MongoDB Server

#创建dbpath和logpath

mkdir -p /mongodb/data /mongodb/log  
#进入mongodb目录,启动mongodb服务
bin/mongod --port=27017 --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log \
--bind_ip=0.0.0.0 --fork

–dbpath :指定数据文件存放目录
–logpath :指定日志文件,注意是指定文件不是目录
–logappend :使用追加的方式记录日志
–port:指定端口,默认为27017
–bind_ip:默认只监听localhost网卡
–fork: 后台启动
–auth: 开启认证模式

添加环境变量

#修改/etc/profile,添加环境变量,方便执行MongoDB命令
export MONGODB_HOME=/usr/local/soft/mongodb
PATH=$PATH:$MONGODB_HOME/bin
#重新加载环境变量
source /etc/profile

利用配置文件启动服务
编辑MONGODB_HOME/conf/mongo.conf文件

systemLog:
  destination: file
  path: /mongodb/log/mongod.log # log path
  logAppend: true
storage:
  dbPath: /mongodb/data # data directory
  engine: wiredTiger  #存储引擎
  journal:            #是否启用journal日志
    enabled: true
net:
  bindIp: 0.0.0.0
  port: 27017 # port
processManagement:
  fork: true

注意:一定要yaml格式

#启动mongodb
mongod -f /mongodb/conf/mongo.conf
# -f 选项表示将使用配置文件启动mongodb


##关闭mongodb服务

#方式一
mongod --port=27017 --dbpath=/mongodb/data --shutdown
#方式二:进入mongo shell

use admin
db.shutdownServer()

2、MongoDB-连接

MongoDB shell 来连接 MongoDB 服务器
标准URI连接语法

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
  • mongodb:// 这是固定的格式,必须要指定
  • username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登录这个数据库
  • host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。
  • portX 可选的指定端口,如果不填,默认为27017
  • /database 如果指定username:password@,连接并验证登录指定数据库。若不指定,默认打开 test 数据库。
  • ?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开

options:(标准的连接格式包含了多个选项(options))

选项描述
replicaSet=name验证replicaSet的名称。 Impliesconnect=replicaSet.
slaveOk=true/false
  • true:在connect=direct模式下,驱动会连接第一台机器,即使这台服务器不是主。在connect=replicaSet模式下,驱动会发送所有的写请求到主并且把读取操作分布在其他从服务
  • false: 在 connect=direct模式下,驱动会自动找寻主服务器. 在connect=replicaSet 模式下,驱动仅仅连接主服务器,并且所有的读写命令都连接到主服务器
safe=true/false
  • true: 在执行更新操作之后,驱动都会发送getLastError命令来确保更新成功。(还要参考 wtimeoutMS)
  • false: 在每次更新之后,驱动不会发送getLastError来确保更新成功
w=n驱动添加 { w : n } 到getLastError命令. 应用于safe=true
wtimeoutMS=ms驱动添加 { wtimeout : ms } 到 getlasterror 命令. 应用于 safe=true
fsync=true/false
  • true: 驱动添加 { fsync : true } 到 getlasterror 命令.应用于 safe=true.
  • false: 驱动不会添加到getLastError命令中
journal=true/false如果设置为 true, 同步到 journal (在提交到数据库前写入到实体中). 应用于 safe=true
connectTimeoutMS=ms可以打开连接的时间
socketTimeoutMS=ms发送和接受sockets的时间

实例

使用默认端口来连接 MongoDB 的服务

mongodb://localhost

通过 shell 连接 MongoDB 服务:

$ ./mongo
MongoDB shell version: 4.4.18
connecting to: test
... 

MongoDB 连接命令格式

连接本地数据库服务器,端口是默认的:27017

mongodb://localhost

使用用户名fred,密码foobar登录localhost的admin数据库。

mongodb://fred:foobar@localhost

使用用户名fred,密码foobar登录localhost的baz数据库。

mongodb://fred:foobar@localhost/baz

连接 replica pair, 服务器1为example1.com服务器2为example2。

mongodb://example1.com:27017,example2.com:27017

连接 replica set 三台服务器 (端口 27017, 27018, 和27019):

mongodb://localhost,localhost:27018,localhost:27019

连接 replica set 三台服务器, 写入操作应用在主服务器 并且分布查询到从服务器。

mongodb://host1,host2,host3/?slaveOk=true

直接连接第一个服务器,无论是replica set一部分或者主服务器或者从服务器

mongodb://host1,host2,host3/?connect=direct;slaveOk=true

当你的连接服务器有优先级,还需要列出所有服务器,你可以使用上述连接方式。

安全模式连接到localhost:

mongodb://localhost/?safe=true

以安全模式连接到replica set,并且等待至少两个复制服务器成功写入,超时时间设置为2秒。

mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000

3、Mongo shell使用

mongo是MongoDB的交互式JavaScript Shell界面,它为系统管理员提供了强大的界面,并为开发人员提供了直接测试数据库查询和操作的方法

bin/mongo --port=27017 
bin/mongo localhost:27017
mongodb://xxx:xxx@192.168.229.106:27017/
--port:指定端口,默认为27017
--host:连接的主机地址,默认127.0.0.1

JavaScript支持

mongo shell是基于JavaScript语法的,MongoDB使用了SpiderMonkey作为其内部的JavaScript解释器引擎,这是由Mozilla官方提供的JavaScript内核解释器,该解释器也被同样用于大名鼎鼎的Firefox浏览器产品之中。SpiderMonkey对ECMA Script标准兼容性非常好,可以支持ECMA Script 6。可以通过下面的命令检查JavaScript解释器的版本:

[root@weljy conf]# mongo --port=27017
MongoDB shell version v4.4.9
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("8831aba3-d347-4478-b88a-d21c749fa869") }
MongoDB server version: 4.4.9
> interpreterVersion();
MozJS-60

mongo shell常用命令

命令说明
show dbs | show databases显示数据库列表
use 数据库表名切换数据库,如果不存在创建数据库,刚创建的数据库要想show dbs看到,必须先要插入一些数据
db.dropDatabase()删除数据库
show collections | show tables显示当前数据库的集合
db.集合名.stats()查看集合详情
db.集合.drop()删除集合
show users显示当前数据库的用户列表
show roles显示当前数据库的角色列表
show profile显示最近发生的操作
load(“xxx.js”)执行一个js脚本文件
exit | quit()退出当前shell
help查看mongodb支持哪些命令
db.help()查看当前数据库支持的方法
db.集合名.help()显示集合的帮助信息
db.version()查看数据库版本

数据操作

#查看所有库
show dbs
# 切换到指定数据库,不存在则创建
use test
# 删除当前数据库  
db.dropDatabase()

集合操作

#创建集合语法
db.createCollection(name, options)
#查看集合
show collections
#创建集合
db.createCollection("emp")
#删除集合
db.emp.drop()

创建集合options

字段类型描述
cappedbool(可选)如果为true,则创建固定集合。 固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。
sizeint(可选)为固定集合指定一个最大值(以字节计)。如果 capped 为 true,也需要指定该字段。
maxint(可选)指定固定集合中包含文档的最大数量。

注意:当集合不存在时,向集合中插入文档也会创建集合

4、安全认证

创建管理员账户

#设置管理员用户名与密码需要切换到admin库
use admin
#创建管理员
db.createUser({user:"xxx",pwd:"xxx",roles:["root"]})
# 查看当前数据库所有用户信息 
show users 
#显示可设置权限
show roles 
#显示所有用户
db.system.users.find()

常用权限

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

重新赋予用户操作权限

db.grantRolesToUser( "fox" , [ 
    { role: "clusterAdmin", db: "admin" } ,
     { role: "userAdminAnyDatabase", db: "admin"},
     { role: "userAdminAnyDatabase", db: "admin"},
     { role: "readWriteAnyDatabase", db: "admin"} 
 ])
# 删除用户
db.dropUser("xxx")
#删除当前数据库所有用户
 db.dropAllUser()
#用户认证,返回1表示认证成功
test> use admin
switched to db admin
admin> db.auth("weljy","weljy")
{ ok: 1 }

创建测试数据库,并赋予用户权限

admin> use testdb
switched to db testdb
testdb> db.createUser({user:"testdb",pwd:"testdb",roles:["dbOwner"]})
{ ok: 1 }
testdb> show users
[
  {
    _id: 'testdb.testdb',
    userId: new UUID("f3f6f51b-fb93-4222-a481-ae893708b639"),
    user: 'testdb',
    db: 'testdb',
    roles: [ { role: 'dbOwner', db: 'testdb' } ],
    mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
  }
]

默认情况下,MongoDB不会启用鉴权,以鉴权模式启动MongoDB

mongod -f /mongodb/conf/mongo.conf --auth
# 启用鉴权之后,连接MongoDB的相关操作都需要提供身份认证

mongo localhost:27017 -u xxx -p xxx --authenticationDatabase=admin

-----------------------------------------------------------------
mongodb://testdb:testdb@192.168.229.106/testdb


Current Mongosh Log ID: 63f86b8358ebc516b2d18795
Connecting to:          mongodb://<credentials>@192.168.229.106/testdb?directConnection=true&appName=mongosh+1.7.1
Using MongoDB:          4.4.9
Using Mongosh:          1.7.1

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

testdb>

5、MongoDB工具

官方GUI工具-COMPASS

GUI工具- Robo 3T免费

GUI工具-Studio 3T(收费,试用30天)

MongoDB Database Tools

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值