一、 关系型数据库(sql)

1.建表

二、非关系型数据库(nosql  98提出的概念)

1.不用建库建表数据直接存入就可

  

优缺点:

  关系型:节约资源(学生姓名和课程名不重复出现),开发不方便(需先建库建表,外键等)

  非关系型:浪费资源(学生姓名和课程名重复出现),开发方便(不需要建库建表,数据直接存)

  开发常用关系型,爬虫常用非关系型

三、Ubuntu安装: sudo apt-get install mongodb

  Centos安装:sudo yum install mongodb

四、mongodb基本操作:

  1.启动:sudo service mongodb start

  2.停止:sudo service mongodb stop

  3.重启:sudo service mongodb restart

  4.进入客户端:mongo

    

    出现上图代表正确进入

  5.退出客户端:exit、ctrl + c

  6.默认端口:27017

  7.默认配置文件位置:/etc/mongod.conf

  8.默认日志位置:/var/log/mongodb/mongod.log

  9.查看帮助命令:mongod -help  (或进入mongo直接 help)

  10.关于database的基本命令:

    a.查看所有的库:show database、  show databases、show dbs

    b.使用一个库:use 库名

    c.查看当前库名:db

    d.切换数据库:use 库名

    e.删除当前数据库:db.dropDatabase()

    f.第一次向数据库中加入数据时,数据库自动创建。

  11.关于集合的基本命令:

    a.不用手动创建集合,向不存在的集合第一次加入数据时,集合会自动创建出来

      

      如图集合会自动创建

    b.手动创建集合:

      db.createCollection('stu')

      db.createCollection(name, options)

      db.createCollection('stu', {capped:true, size:10})

      参数capped:默认为false表示不设置上限,当值为true表示设置上限,参数size当capped为true时,需要指定此参数,表示上限大小,单位为字节,如果数据超过上限,会将之前的数据覆盖。

    c.查看集合:show collections

    d.删除集合:db.集合名.drop()

  12.数据类型:

    ObjectId:文档id

    String 字符串,必须是有效的utf-8

    Boolean   存储一个布尔值    true     false

    Integer 整数    32位或64位取决于服务器

    Double   浮点型

    Arrays    数组,列表,多个值存储到一个键

    Object    一个值就是一个文档

    Null        存储Null值

    Timestamp       时间戳,表示从1970.1.1到现在的总秒数

    Date       存储当前的日期或时间

    ObjectId  是一个12字节的十六进制数,前四个字节是当前的时间戳,接下来三个字节是机器的id,接下来的两个字节是mongodb的服务进程id最后三个字节是简单增量值

  13.数据插入:

    db.集合名.insert(数据)

    db   指的是本数据库

    集合名   相当于mysql中的表    例:

      

  14.保存:

    db.集合名.save(数据)

    如果_id不存在,则添加数据,如果_id存在,则修改数据

    例:

      

  15.简单查询:

    db.集合名.find()  例:

      

  16.复杂查询:

    比较运算符(等于(默认)、小于($lt)、小于等于($lte)、大于($gt)、大于等于($gte)、不等于($ne))

    例:

      

    逻辑运算符:

      and:直接写多个条件

        

      or:使用 $or,值为一个数组,数组中每个元素为json

        

         组合使用

        

      $in 范围之内

      $nin 不在范围之内

        

  17.排序:

    db.集合名.find().sort({字段:1})   参数1位升序,-1位降序

    升序   db.stu1.find().sort({math:1})

    降序   db.stu1.find().sort({math:-1})

  18.统计个数

    方法count()用于统计结果集中文档条数

    db.集合名.find().count()

    db.集合名.count({条件})

    

  19.消除重复

    方法distinct()对数据进行去重

    db.集合名.distinct('去重字段',{条件})

    例:

      

  20.更新

    db.集合名.update(<qurey>, <update>, {multi:<boolean>})

    参数query:查询条件

    参数update:更新操作符

    参数multi:可选,默认值false,表示只更新找到的第一条记录;值为true,表示把满足条件的条件全部更新

    

    可见这样更新有问题,应该这样:

    

    发现这样只会更新一条,若更新全部应:

    

  21.删除

    db.集合名.remove(<query>, {justOne:<boolean>})

    参数query:可选,删除文档条件

    参数justOne:可选,默认为false,表示删除多条;如果设置为true或1,则只删除一条

    

  22.查询结果处理

    查询结果格式化:

      db.集合名.find(条件).pretty()

      

      db.集合名.findOne(条件):只返回第一个结果

    指定文档数量

      方法limit()  用于读取指定数量的文档

        db.集合名.find().limit(number)

      方法skip()  用于跳过指定数量的文档

        db.集合名.find().skip(number)

  23.投影

    在查询的返回结果中,只选择必要字段

      db.集合名.find({}, {字段名1:1,字段名2:1})

      参数为字段名,值1表示显示,值为0表示不显示

      特殊:对于_id列默认是显示的,如果不显示需要明确设置为0

      

五、Mongodb聚合aggregate

  聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列处理,输出响应结果。

  常用管道如下:

    $group:将集合重的文档分组,可用于统计结果。

    

    分组依据放在_id后面。

    统计地址,统计每个地址的人数。例:

      

    统计每个地址的平均年龄, 例:

      

    group by null :将集合中所有文档分为一组,例:

      

    $project 修改文档结构,如重命名、增加、删除字段创建计算结构,例:

      

    $match:数据过滤(管道过滤不能用find)

    (年龄大于20的人按名字分组,统计每个地址有多少人)

      

    $sort:将输入文档排序后输出

     

    将数据按姓名分组,统计每个姓名的人数,并按降序排序:

      

    $limit:限制集合管道返回的文档数,db.stu1.aggregate({$limit:2})

    $skip:跳过指定数量的文档,并返回余下文档,db.stu1.aggregate({$skip:2})

      db.stu1.aggregate({$skip:2}, {$limit:2})

    

六、常用表达式

  $sum  计算综和,$sum:1 表示以一倍计数

  $avg   计算平均值

  $min   获取最小值

  $max  获取最大值

七、索引:(提高查询速度)(唯一索引、普通索引、联合索引)

  

  创建索引:

    语法:db.集合.ensureIndex({属性:1})      1表示升序,-1代表降序

    查看当前集合所有索引:db.集合.getIndexes()

      

  删除索引:

    db.集合.dropIndex({索引名称:1})

    

  在默认情况下创建 的索引均不是唯一索引

    创建唯一索引:db.集合.ensureIndex({'name':1}, {'unique':true})

    建立联合索引:db.集合.ensureIndex({'math':1, 'age':1})

    

八、数据库的备份和还原

  备份语法:

    远程备份:

      mongodump -h  dbhost  -d    dbname    -o 路径

                 服务器IP地址        数据库名

      mongodump -h 192.168.1.100:27017 -d   test1   -o  /home/test2

      -h:服务器地址,指定端口号

      -d:需要备份的数据库名称

      -o:备份存放数据的位置,此目录放置备份的数据

    本地备份:

      mongodump -d dbname -o 路径

  还原语法:

    远程还原:

      mongorestore   -h   dbhost   -d    dbname   -o   路径

      -h:服务器地址,指定端口号

      -d:需要备份的数据库名称

      -o:备份数据所在位置

      mongorestore    -h   192.168.1.100:27017 -d test2   -o   /home/abc/day8/studentback/student

    本机还原:

      mongorestore -d   student2   /home/abc/day8/studentback/student

mongodb细讲的更多相关文章

  1. JProfiler远程监控Linux上Tomcat的安装过程细讲(步骤非常详细!!!)

    JProfiler远程监控Linux上Tomcat的安装过程细讲(步骤非常详细!!!) 1.文件准备: 服务器:CentOS Linux release 7.3.1611 (Core)     Apa ...

  2. JavaScript基础细讲

    JavaScript基础细讲   JavaScript语言的前身叫作Livescript.自从Sun公司推出著名的Java语言之后,Netscape公司引进了Sun公司有关Java的程序概念,将自己原 ...

  3. Celery定时任务细讲

    Celery定时任务细讲 一.目录结构 任务所在目录 ├── celery_task # celery包 如果celery_task只是建了普通文件夹__init__可以没有,如果是包一定要有 │ ├ ...

  4. 细讲前端设置cookie, 储存用户登录信息

    细讲前端设置cookie 引言 正文 一.设置cookie 二.查看cookie 三.删除cookie 四.封装cookie操作 结束语 引言 我们都知道如果想做一个用户登录并使浏览器保存其登录信息, ...

  5. 学到了林海峰,武沛齐讲的Day19 迭代细讲

    在家加1个月学了8day的课  出差6天看了8day的课..说明再忙也是可以挤挤多学习的. 广州出差最后两天没学习.一天做车,一天做公司的事...4天就过去了. 老师讲的包子和鸡蛋需求不好...讲的有 ...

  6. MySQL高级部分理论知识细讲

    文章目录 一.数据库分区.分表.分库.分片 YesOk ,大家好 ,我是小刘,许久不见,甚是想念 ,小刘今天来带大家学习 分库分表的基础知识 1.1 单机数据库的瓶颈 单个表数据量越大,读写锁,插入操 ...

  7. 转载:JProfiler远程监控LINUX上的Tomcat过程细讲

    来源于xuwanbest的博客   所谓"工欲善其事,必先利其器",好的工具确能起到事半工倍的作用.我用到的最多的就两个JConsole 和JProfiler .JConsole监 ...

  8. 细讲encodeURI和encodeURIComponent以及escape的区别与应用

    首先,我们都知道这三个东西都是用来编码的 先来说encodeURI()和encodeURIComponent() 这两个是在转换url时候用来编码解码用的. 有编码就会有解码, 解码就是decodeU ...

  9. Java文件上传细讲

    什么是文件上传? 文件上传就是把用户的信息保存起来. 为什么需要文件上传? 在用户注册的时候,可能需要用户提交照片.那么这张照片就应该要进行保存. 上传组件(工具) 为什么我们要使用上传工具? 为啥我 ...

随机推荐

  1. add, subtract, multiply, divide

    加.减.乘.除:add, subtract, multiply, divide

  2. 2017-2018 ACM-ICPC, NEERC, Southern Subregional Contest

    A. Automatic Door 对于规律的点可以推公式计算,对于噪点则暴力计算,时间复杂度$O(m\log m)$. #include<stdio.h> #include<ios ...

  3. XV Open Cup named after E.V. Pankratiev. GP of America

    A. Area of Effect 首先最优解中必有一个点在圆的边界上. 若半径就是$R$,则枚举一个点,然后把剩下的事件极角扫描即可,时间复杂度$O(m(n+m)\log(n+m))$. 否则圆必然 ...

  4. 明天开始学习 Hibernate

    明天开始学 Hibernate ,想简单的了解一下 Hibernate,也借此机会了解一下 ORM 计划用 5 天的时间看完,包括整理笔记 加油吧,少年~~

  5. js面向对象关键点

    函数加new 工作流程: (1) 创建一个新对象: => var this = new Object(); (2) 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象) : (3) ...

  6. App测试方法总结

    安全测试   一.安全测试 1.软件权限 1)扣费风险:包括短信.拨打电话.连接网络等. 2)隐私泄露风险:包括访问手机信息.访问联系人信息等. 3)对App的输入有效性校验.认证.授权.数据加密等方 ...

  7. apache启动不了应对方法

    原因一:80端口占用 例如IIS,另外就是迅雷.我的apache服务器就是被迅雷害得无法启用! 原因二:软件冲突 装了某些软件会使apache无法启动如Dr.com 你打开网络连接->TcpIp ...

  8. Linux之使用mount挂载ISO镜像

    Liunx系统中如果不方便把ISO镜像放在CDROM中进行挂载可以把对应ISO镜像上传至主机使用mount命令挂载 系统环境查看 上传镜像后挂载 mount -o loop ubuntu-18.04. ...

  9. 我了解到的新知识之----遇到路由器DNS被篡改我该怎么办?

    最近一则新闻让我不得不开始重视家中一直沉默在角落里路由器了. http://www.21ic.com/tougao/article/8346.html 于是立刻搜索了一些关于如何检查DNS地址是否被修 ...

  10. EF Core 相关的千倍性能之差: AutoMapper ProjectTo VS Mapster ProjectToType

    在前两天遇到 .NET Core 中 EF Core 的异步与同步查询的百倍性能之差(详情之前的博文)之后,这两天又遇到了 AutoMapper ProjectTo<T> 与 Mapste ...