MongoDB的一些简单语法使用

avatar 2019年9月13日21:23:04 评论 1,156 次浏览

一、MongoDB的远程连接以及授权

1、MOngoDB远程连接

mongo --host <mongos_host>:<port> -u <username> -p --authenticationDatabase <database>

参数

--authenticationDatabase  认证授权

也可以使用

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

mongodb://localhost

使用用户名wulaoer,密码wulaoer.org登录localhost的admin数据库。

mongodb://wulaoer:wulaoer.org@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

例如:

./mongo --host s-2zead61791ed4.mongodb.rds.wulaoer.org:3717 -u wulaoer -p --authenticationDatabase wulaoer.org

MongoDB创建用户并授权

1、MongoDB创建库

use DATABASE_NAME      #如果没有就创建,存在就事切换,新创建的库必须插入数据才可以show dbs

2、创建用户授权用户

db.createUser(
  {
    user: "wulaoer",
    pwd: "wulaoer.org",
    roles: [ 
    { role: "角色", db: "安全认证的数据库" },
    { role: "角色", db: "安全认证的数据库" } 
             ]
  }
)

注:

  • user:创建的用户名称,如 zhangSan、root .......
  • pwd:用户登录的密码
  • roles:为用户分配的角色,不同的角色拥有不同的权限,参数是数组,可以同时设置多个
  • role:角色,MonngoDB 已经约定好的角色,不同的角色对应不同的权限,内置的权限如下:

roles角色权限类型

read:允许用户读取指定数据库

readWrite:允许用户读写指定数据库

dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

root:只在admin数据库中可用。超级账号,超级权限 // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)

例如:

use wulaoer
db.createUser(
 {
   user: "wulaoer",
   pwd: "wulaoer.org",
   roles: [
      { role: "readWrite", db: "wulaoer" }
   ]
 }
)

db.createUser({ user: "root", pwd: "root", roles: [ {role: "userAdminAnyDatabase", db: "admin"} ]})

验证授权认证

db.auth("wulaoer","wulaoer.org")      #返回1,认证成功,0是失败

创建超级管理员

db.createUser(
  {
    user: "root",
    pwd: "root",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

三、MOngoDB的增删改查操作

MongoDB库的增删改查

show dbs;#查看数据库
use wulaoer;#如果没有就创建一个
db;#查看当前数据库
db.dropDatabase();#删除数据库

数据库操作

use wulaoer;         #切换库,没有库即创建
show collections;#查看集合

创建集合、插入:

create collection;#创建集合
db.student.insert({"name":"张三","age":"22","sex":"男","class":"计算机2班"});#如果数据库中不存在集合,就创建并插入这些数据
db.student.insert({"name":"李四","age":"22","sex":"女","phone":"18513081650","class":"计算机1班"});#里面的key-value不用保持一致
db.student.insert([{"name":"王五","age":"22","sex":"男","class":"计算机2班"},{"name":"赵六","age":"22","sex":"女","phone":"18513081650","class":"计算机1班"}]);#同时插入多条数据

更新:

db.student.update({"name":"张三"},{"name":"张三丰"});#如果有多条语句,只修改第一条,会覆盖原有数据
db.student.update({"22":"女"},{"name":"张三丰"});
db.student.update({"name":"张三"},{$set:{"name":"张无忌"}});#只想改某个key的value使用set
db.student.update({"name":"王五"},{$set:{"name":"张无忌"}},{multi:true});#把所有的记录都改了

查询:

db.student.find();#查询全部
db.student.find({"name":"李四"});#查询指定记录,返回这一行结果
db.student.update({"name":"张三丰"},{"name":"张无忌","age":"28","sex":"男"});
db.student.find({"name":"张无忌","age":"28"});#and操作
db.student.find({$or:[{"name":"张无忌"},{"name":"李四"}]});#or操作
db.student.find().pretty();#格式化显示
db.student.find().count();#获取结果的行数
db.student.find().sort({"age":-1});#按照sort里面key的值排序,1为正序,-1为倒序

删除:

db.dropDatabase() #删除库,不过需要进库之后才可以执行删除语句
db.test.drop(); #删除集合test
db.student.remove();#删除所有数据
db.student.remove({"22":"女"});#按照条件删除
db.student.remove({"name":"张无忌"},2);#删除几条

查:

show collections #查看集合,需要先切换到dbs中

四、分片相关

查:

db.comment.getShardDistribution() #查看集合comment的分片状态
db.comment.count() #查看集合comment的数据多少条

开启均衡器

use admin
sh.setBalancerState(true);

关闭均衡器

sh.stopBalancer()  

rs.add("ip:port");     #  新增从节点
rs.addArb("ip:port"); #  新增仲裁节点
rs.remove("ip:port"); #  删除一个节点

查看均衡器的状态

sh.getBalancerState()

 

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: