zoukankan      html  css  js  c++  java
  • Mongodb基础01

    数据库设计流程

    1. 确定功能所属集合
    2. 确定集合字段
      三个必要字段: 创建于什么时候字段 更新于什么时候字段 状态字段

    编号 学号 姓名 电话 性别 年龄 学历 备注

    use school

    // 插入数据

    for (var num = 1; num <= 20; num++){
      db.stu.insert({
        id: num,
        no: "XX" + num,
        uname: "小学一年级" + num + "号",
        tel: "11111111111",
        sex: "男" ,
        age: num,
        school: "小学生",
        remark: "备注内容111"
      })
    }
    
    db.stu.find().pretty() // 格式化显示信息
    

    排序和分页

    使用数据

    use test3 
    db.c1.insert({id: 1, name: "a", sex: 1, age: 1})
    db.c1.insert({id: 2, name: "a", sex: 1, age: 1})
    db.c1.insert({id: 3, name: "b", sex: 2, age: 2})
    db.c1.insert({id: 4, name: "c", sex: 2, age: 3})
    db.c1.insert({id: 5, name: "d", sex: 2, age: 4})
    db.c1.find()
    

    排序

    语法:
    db.集合名.find().sort(JSON数据)
    说明:
    键:要排序的列/字段
    值:1 升序 -1 降序
    例子:

      db.c1.find().sort({age: -1}) // 降序
      db.c1.find().sort({age: 1})  // 升序
    

    扩展方法

    语法:
    db.集合名.find().sort().skip(数字).limit(数字)
    |- db.集合名.find().sort().skip(数字)
    |- db.集合名.find().sort().limit(数字)
    db.集合名.find().count()
    说明:
    skip指跳过指定的数量数据
    limit指限制每次查询的数量数据
    count()统计总数量
    例子:

      db.c1.find().sort({age: -1}).skip(0).limit(2) // 查询 前两条 降序排序 的结果
      db.c1.find().sort({age: -1}).skip(2).limit(2) // 查询 跳过两条数据后 的 前两条 降序排序 的结果
    

    分页使用:
    例子:数据库1-10的数据,每页显示两条(5页)
    skip计算公式: (当前页) - 1 * 煤业显示条数
    limit值: 2

    聚合查询

    语法:

      db.集合名.aggregate([
        {管道: {表达式}}
        ...
      ])
    

    常用管道:
    $group
    $match 过滤数据,
    $sort 集合数据进一步排序
    $skip 跳过指定文档数
    $limit 限制集合数据返回文档数
    常用表达式:
    $sum 总和 $sum:1表示统计总数量
    $avg 平均
    $min 最小值
    $max 最大值

    例子:
    数据:

      use test4
      db.c1.insert({id: 1, name: 'a', sex: 1, age: 1})
      db.c1.insert({id: 2, name: 'a', sex: 1, age: 2})
      db.c1.insert({id: 3, name: 'b', sex: 2, age: 3})
      db.c1.insert({id: 4, name: 'c', sex: 2, age: 4})
      db.c1.insert({id: 5, name: 'd', sex: 2, age: 5})
    

    统计各个性别的总年龄

        db.c1.aggregate([
          {
            $group: {
              _id: '$sex', // 固定字段
              rs: {$sum: '$age'}
            }
          }
        ])
    

    统计各个性别的总人数

        db.c1.aggregate([
          {
            $group: {
              _id: '$sex',
              rs: {$sum: 1}
            }
          }
        ])
    

    总人数和平均年龄

        db.c1.aggregate([
          {
            $group: {
              _id: null,
              total_num: {$sum: 1},
              total_avg: {$avg: '$age'}
            }
          }
        ])  
    

    查询各个性别人数,并按照人数升序

        db.c1.aggregate([
          {
            $group: {
              _id: '$sex',
              rs: {$sum: 1}
            }
          },
          {
            $sort: {
              rs: -1
            }
          }
        ])
    

    索引

    索引是一种排序好的便于快速查询的数据结构
    作用:帮助数据库快速查询
    优点:
    提高数据查询的效率,降低数据库的IO成本
    通过索引对数据进行排序,降低数据排序的成本,降低CPU的消耗
    缺点:
    占用磁盘空间
    大量索引影响SQL语句效率,因为每次插入和修改数据都需要更新索引

    创建索引:

    db.集合名.createIndex(待创建索引的列[, 额外选项])
    参数:
    待创建索引的列:{键: 1,..., 键: -1}
    1:升序;-1:降序;
    例如: {age: 1} 表示创建age索引并按照升序的方式存储
    额外说明:设置索引的名称或唯一索引值等
    部分额外选项用法:
    定义索引名: db.集合名.createIndex(待创建索引的列, {name: 索引名})
    创建唯一索引: db.集合名.createIndex(待创建索引的列, {unique: true}) 【默认false,创建唯一索引后,索引具有唯一性,该列不允许出现新增出现重复内容】

    删除索引

    删除全部:
    db.集合名.dropIndexes()
    删除指定:
    db.集合名.dropIndex(索引名)

    查看索引

    db.集合名.getIndexes()

    分析索引

    检查索引搜索结果的状态
    db.集合名.find().explain('executionStats')

    索引选择原则(如何选择合适的列创建索引)、

    • 为常做条件、排序、分组、联合操作的字段建立索引
    • 选择唯一性索引(如:性别【只有男女】)
    • 选择较小的数据列,为较长的字符串使用前缀索引(索引文件更小)

    示例:

      use test5
      for(var i = 0; i < 10000; i++) {
        db.c1.insert({'name': 'aaa' + i, 'age': i})
      }
      db.c1.createIndex({name: 1}) // 创建name列的索引,并为升序
      db.c1.getIndexes() // 查询c1的所有索引
      db.c1.dropIndex('name_1') // 删除名称为name_1的索引
      db.c1.createIndex({name: 1}, {name: 'webopenfather'}) // 创建name列的索引,并为升序,且索引名为webopenfather
      db.c1.createIndex({name: 1, age: 1}) // 创建name列和age列的组合索引
      db.c1.createIndex({name: 1}, {unique: true}) // 创建唯一索引 默认false
    

    权限机制

    语法:

      db.createUser({
        "user": "账号",
        "pwd": "密码",
        "roles": [{
          role: "角色",
          db: "所属数据库"
        }]
      })
    

    开启验证模式

    指需要用户输入账号密码才能登陆使用
    操作步骤:

    1. 添加超级管理员
      db.createUser({
        "user": "admin",
        "pwd": "admin888",
        "roles": [{
          role: "root",
          db: "admin"
        }]
      })
    
    1. 退出卸载服务(cmd窗口需要用管理员运行)
      mongodb/bin目录下: mongod --remove
    2. 重新安装需要输入账号密码的服务(在原安装命令的基础上加上--auth即可)
      mongodb/bin目录下: mongod --install --dbpath mongodb\data目录 --logpath log目录\不重复的日志文件.log
      net start mongodb

    通过超级管理员账号登陆

    方法1:
    mongo服务器IP地址: 端口号/数据库 -u 用户名 -p 密码
    方法2:
    a 先登录
    mongo
    b 选择数据库
    use admin
    c 输入db.path(用户名, 密码)
    db.path(用户名, 密码)

    备份和还原

    备份

    导出数据库: mongodump -h -prot -u -p -d -o
    说明:
    -h host,服务器IP地址(一般不写,默认本机)
    -port 端口(一般不写,默认27017)
    -u user,账号
    -p password,密码
    -d database,数据库(数据库不写导出全局)
    -o open,备份到指定目录下

  • 相关阅读:
    Elasticsearch (二) 索引
    Elasticsearch (一)搭建与启动
    IDEA 插件
    IDEA 导入华丽的皮肤
    Tomcat https 访问
    oracle系统视图SQL语句整理
    Java内存优化和性能优化的几点建议
    Tomcat配置SSL证书
    sublime集成MinGW,打造C/C++开发环境
    一个简单的Vue.js组件开发示例
  • 原文地址:https://www.cnblogs.com/miao91/p/15708619.html
Copyright © 2011-2022 走看看