A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

索引操作
  • 建立索引:

  • 语法:db.集合.ensureIndex({属性:1}),1表示升序, -1表示降序
  • 具体操作

  <!-- 建立索引 -->  db.t255.ensureIndex({name:1})  <!-- 查看执行效率 -->  db.t255.find({name:'test10000'}).explain('executionStats')
  • 建立唯一索引

  • 在默认情况下索引字段是可以重复的
  • 如果不希望重复, 可以指定索引唯一
  • 语法: db.集合.ensureIndex({属性:1},{unique:true})
  • 举例: 添加stu集合的name为唯一索引

  db.stu.ensureIndex({'name':1},{unique:true})
  • 建立联合索引(什么时候要建立联合索引)

  • 比如: 姓名和年龄都相同才认为是同一个人, 不能重复存储
  • 语法: db.集合.ensureIndex({字段1:1,字典2:1})
  • 举例: db.stu.ensureIndex({name:1, age:1})
  • 注意: 建立联合索引,如果查询的时候没有使用到第一个索引, 联合索引不会生效

  • 查看当前集合的所有索引

  • 语法: db.集合.getIndexes()

  • 删除索引:

  • 语法: db.集合.dropIndex({索引字段: 1})


数据库恢复跟备份
数据备份与恢复
1. 备份的语法:
mongodump -h dbhost -d dbname -o dbdirectory  -h: 服务器地址, 也可以指定端⼝号  -d: 需要备份的数据库名称  -o: 备份的数据存放位置, 此⽬录中存放着备份出来的数据
  • 举例:

mongodump -h 192.168.196.128:27017 -d test1 -o ~/Desktop/test1bak
2. 恢复语法:
    mongorestore -h dbhost -d dbname --dir dbdirectory    -h: 服务器地址    -d: 需要恢复的数据库实例    --dir: 备份数据所在位置
  • 举例:

mongorestore -h 192.168.196.128:27017 -d test2 --dir ~/Desktop/test1bak/test1
3. 导出
用于和其他平台进行交互对接,将数据导出成指定格式文件进行使用,比如数据分析常用的csv文件 用于给非计算机行业的用户查看数据,对于他们来说csv文件(打开之后是电子表格)更方便
导出语法: mongoexport -h dbhost -d dbname -c colname -o filename --type json/csv -f field
  • -h: 服务器地址
  • -d: 数据库名
  • -c: 集合名
  • -o: 导出文件名
  • --type: 文件类型,默认json格式,可选数据类型json,csv
  • -f: 需要导出的字段,导出为json格式的数据时可以不指定导出哪些字段,默认全部,导出成csv文件是必须指定

示例:mongoexport -h 192.168.196.128:27017 -d test2 -c col1 -o test1_col1 [--type csv -f name,age,number]
4. 导入
导出语法: mongoimport -h dbhost -d dbname -c colname --file filename [--headerline --type json/csv -f field]
  • -h: 服务器地址
  • -d: 数据库名
  • -c: 集合名
  • --file: 导入文件名
  • --type: 文件类型,默认json格式,可选数据类型json,csv
  • -f: 需要导入的字段

示例:mongoexport -h 192.168.196.128:27017 -d test2 -c col1 -o test1_col1 --type csv -f name,age,number

mongodb权限管理
Mongodb的权限管理
学习目标
1.了解 mongodb的权限管理
1 为什么要进行权限管理的设置
刚安装完毕的mongodb默认不使用权限认证方式启动,与MySQL不同,mongodb在安装的时候并没有设置权限,然而公网运行系统需要设置权限以保证数据安全,所以我们要学习mongodb的权限管理
2 mongodb的权限管理方案
  • MongoDB是没有默认管理员账号,所以要先添加管理员账号,并且mongodb服务器需要在运行的时候开启验证模式

  • 用户只能在用户所在数据库登录(创建用户的数据库),包括管理员账号。
  • 管理员可以管理所有数据库,但是不能直接管理其他数据库,要先认证后才可以。

3 mongodb超级管理员账号的创建
3.1. 以权限认证的方式启动mongodb数据库
sudo mongod -auth
启动之后在启动信息中会有如下信息,说明mongodb以权限认证的方式启动成功
[initandlisten] options: { security: { authorization: "enabled" } }
3.2. 创建超级用户 使用admin数据库(超级管理员账号必须创建在该数据库上)
use admin
创建超级用户
db.createUser({"user":"python","pwd":"python","roles":["root"]})
创建成功会显示如下信息
Successfully added user: { "user" : "python", "roles" : [ "root" ] }
3.3 退出客户端再次登录验证 此时再使用数据库各命令的时候会报权限错误,需要认证才能执行相应操作
use admindb.auth('python','python')1
python用户是创建在admin数据库上的所以必须来到admin数据库上进行认证,认证成功会返回1,失败返回0
4 创建普通用户
1.选择需要创建用户的数据库
use test1
2.在使用的数据库上创建普通用户
db.createUser("user":"user1", "pwd":"pwd1", roles:["read"])创建普通用户user1,该用户在test1上的权限是只读db.createUser("user":"user1", "pwd":"pwd1", roles:["readWrite"])创建普通用户user1,该用户在test1上的权限是读写
3.在其他数据库上创建普通用户
use admindb.createUser({"user":"python1", "pwd":"python1", roles:[{"role":"read","db":"dbname1"},{"role":"readWrite","db":"dbname2"}]})
在admin上创建python1用户,python1用户的权限有两个,一个再dbname1上的只读,另一个是在dbname2上的读写
5 查看创建的用户
show users{    "_id" : "admin.python",    "user" : "python",    "db" : "admin",    "roles" : [        {            "role" : "root",            "db" : "admin"        }    ]}
6 删除用户
db.dropUser('python')

system.version 用户全都保存在admin数据库的system.version集合中,但是查看或者删除的时候在哪创建就在哪个库查看或者删除

现在有两种方式进行用户身份的验证
第一种 (类似 MySql)
客户端连接时,指定用户名,密码,db名称
mongo --port 27017 -u "lyl" -p "123456" --authenticationDatabase "admin"
第二种
客户端连接后,再进行验证
use admin
db.auth("adminUser", "adminPass")
// 输出 1 表示验证成功

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马