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,备份到指定目录下

原文地址:https://www.cnblogs.com/miao91/p/15708619.html