一、 关系型数据库(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. python经典书籍推荐:Python核心编程

    作者:熊猫烧香 链接:www.pythonheidong.com/blog/article/27/ 来源:python黑洞网 对<Python核心编程>的褒奖 “ The long-awa ...

  2. 《C和指针》---指针

    内存和地址 计算机的内存由许多的位(bit)组成,每个位可以容纳值0或1. 由于一个位所能表示的范围太有限,所以通常许多位合成一组作为一个单元. 这些位置的每一个都被称为字节(byte),每个字节包含 ...

  3. PCB资料

    电子工程世界论坛 http://bbs.eeworld.com.cn/forum-68-1.html

  4. 20172310 蓝墨云ASL测试 2018-1938872

    20172310 蓝墨云ASL测试 2018-1938872 题目: 已知线性表具有元素{5,13,19,21,37,56,64,75,80,88,92},如果使用折半查找法,ASL是多少? 解答:( ...

  5. 对Spring 的RestTemplate进行包装

    Spring的RestTemplate及大地简化了REST Client的开发,但每次还要编写大量的模板代码,代码不够简洁.我对他进行了一次包装,采用接口来声明REST接口,使用Annotation对 ...

  6. jq冲刺

    1.入口函数$(document).ready(function(){ })简便写法:$(()=>{ }) js的入口函数window.onload()区别js的入口函数要比jq的要晚很多,wi ...

  7. vue-router 之 keep-alive

    参考 https://www.jianshu.com/p/0b0222954483

  8. ubuntu重复登录问题

    第一次遇到: 昨天好不容易装好了驱动,紧接着装了CUDA,cuDNN,Anaconda,VSCode等等.然后安装pytorch的时候遇到了下载的问题,后来也算搞定了.但是在更换了显示器后重启(好像是 ...

  9. Python 在cmd中import模块成功,但是在jupyter notebook中No module xxx found

    由于需要用到python中的某个库,因此打开命令行窗口cmd,然后使用pip安装.安装成功后,在cmd中输入python调出python环境,import该模块并使用,可以正常使用.但是打开juypt ...

  10. Oracle 触发器 trigger

    触发器: 当用户登录/退出或者操作某个数据对象或者进行DDL(建表,建view)引起某个储存过程的值的变化,把这个隐含被调用的过程,称为触发器. 语法 CREATE OR REPLACE TRIGGE ...