Node进阶第四天

一、传统数据库技术回顾

数据库就是存储数据的,那么存储数据用txt就行了啊,为什么要有数据库?

理由之一:数据库有行、列的概念,数据有关系,数据不是散的。

老牌数据库,比如Mysql、SQL Server、Oracle、Access。这些数据库,我们管他们叫做结构型数据库。为什么?因为每个表中,都有名去的字段,每行记录,都有这些字段。不能有的行有,有的行没有。

理由二:数据库能够提供非常方便的接口,让增删改查操作变得简单。

我们的老牌数据库,都无一例外的使用SQL语言,管理数据库。

SQL就是Structure Query Language。

比如,查询所有女生: SELECT * FROM table where xingbie = ‘女’

理由三:数据库不能自己玩儿,要想语言提供接口

老牌数据库出了什么问题?

比如,我们现在向往一个已经有1000条数据的数据库中增加一个字段。

alter table add column …

之前已经存在的数据,实际上不需要增加这个字段。因为这些用户已经填写完毕表单了,不需要再收集这个信息了。我们的意图就是在今后注册的用户,需要填写高中信息。但是,我们刚才说了,所谓的字段,是表的一个结构。所有的行都必须有,不能有的行有这个字段,有的行没有这个字段。

可想而知,大数据时代,数据库中有100万条数据都算少的,我们如果要动字段,时间太长。

所以,字段这个东西,太不灵活。

数据不灵活。一个字段,需要是同样类型的数据。不能一行记录是文本,一行记录是数字。

非结构型数据库NoSQL应运而生。

NoSQL是个怪胎,无法挑战老牌数据库,但是在大数据时代有自己的意义。

  二、NoSQL

非结构型数据库。没有行、列的概念。用JSON来存储数据。

集合就相当于“表”,文档就相当于“行”。

文档就是JSON,上下文语境中,也是Javascript范畴,所以我们的数据库也是JS范畴的东西,JS全栈。

我们看,有些系统,特别需要筛选。比如,筛选出所有女生大于20岁的。那么SQL型数据库,非常擅长。因为它有行、列的概念。

但是,有些系统,真的不需要那么多的筛选,比如站内信。站内信只要存储就好了。

因此,我们总结NoSQL数据库在一下的这几种情况下比较适用:1、数据模型比较简单;

2、需要灵活性更强的IT系统;3、对数据库性能要求较高;4、不需要高度的数据一致性;5、对于给定的key,比较容易映射复杂值的环境。

NOSQL不是银弹,没有资格挑战老牌数据库,但是特定情况下还是合适的。

三、MongoDB安装

官网: https://mongodb.com

mongo         使用数据库

mongod        开机

mongoimport   导入数据

开机命令:

mongodb数据库以.ns结尾

--dbpath就是选择数据库文档所在的文件见:

也就是说,mongoDB中,真的有物理文件,对应一个个数据库。U盘可以拷走。

一定要保持,开机这个CMD不能动了,不能关,不能ctrl+C,一旦这个cmd有问题了,数据库就自动关闭了。

所以,应该再开一个cmd,输入

那么运行环境就是mongo语法了.

列出所有数据库。

show dbs

使用某个数据库

use 数据库名字

如果想新建 数据库,也是use,use一个不存在的就是新建。

查看当前所在数据库

db

student就是所谓的集合。集合中存储着很多json。

db.一个未知的集合名字,这个集合将自动创建。

新的mongodb使用了wt引擎,引擎文件夹可以直接拷贝。

四、数据库使用

要管理数据库,必须先开机,开机使用mongod –dbpath C:\mo,ngo

管理数据库:mongo(一定奥再新cmd中输入)

清屏:

cls

查看所有数据库列表:

show dbs

使用数据库、创建数据库:

use itcast

如果真的想把这个数据库创建成功,那么必须插入一个数据。

数据库中不能直接插入数据,只能往集合(collections)中插入数据。不需要创建集合,只需要写点语法:

db.student.insert({“name”:”xiaoming”});

db.student 系统发现student是一个陌生的集合名字,所以就自动创建了集合。

删除数据库,删除当前所在的数据库

db.dropDatabase();

插入数据,随着数据的插入,数据库创建成功了,集合也创建成功了。

db.student.insert({"name":"xiaoming"});

我们不可能一条一条的insert。所以,我们希望用sublime在外部写好数据库的形式,导入数据库。

mongoimport –-db test --collection restaurants --drop --file primer--dataset.json

(这个命令是清除)

--db test 想往哪个数据库里面导入

--collection restaurants 想往哪个集合中导入

--drop 把集合清空

--file perimeter-dataset.json 哪个文件

4.1 CRUD

插入一条语句:

这样我们就能用VSCode创建一个文件,然后用mongoimport命令导入,这样学习数据库非常方便。

查找数据,用find,find中没有参数,那么将列出这个集合中所有的文档。

db.student.find()

精确匹配:

db.student.find({“score.shuxue”:70});

多个条件:

db.student.find({"score.shuxue":80, "age":9})

大于条件

db.student.find({“score.yuwen”:{$gt:50}});

或者:寻找所有年龄是9岁,或者11岁的男生

db.student.find({$or:[{“age”:9},{“age”:11}]});

查找完毕之后,调用sort,表示升降排序

db.student.find().sort({“borough”:1,”zipcode”:-1})

在MongoDB中 输入mongod 如果不加—path 就会以下面的目录创建默认数据库。

修改数据

修改里面还有查询条件,你要告诉mongo

查找名字叫做小明的,把年龄更改为16岁:

db.student.update({"name":"小明"},{$set:{"age":16}});

查找数学成绩是70,把年龄更改为33岁:

db.student.update({"score.shuxue":70},{$set:{"age":33}});

更新多条语句

更改所有匹配项目:

db.student.update({},{$set:{"age":33}},{multi:true});

完整替换,不出现$set关键字:(一般不用,因为这一条记录直接就没了)

db.student.update({“name”:”小明”},{“name”:”大明”,”age”:16})

删除数据

db.student.remove({"score.shuxue":80});

db.student.remove({"score.shuxue":{justOne:true}},);

Node_进阶_4的更多相关文章

  1. Node_进阶_8

    Node进阶第八天 一.复习 Node.js特点:单线程.异步I/O(非阻塞I/O).事件驱动(事件环). 适合的程序:就是没有太多的计算,I/O比较多的业务. 举例:留言本.考试系统.说说.图片裁切 ...

  2. Node_进阶_7

    Node进阶第七天 一.复习 一.索引   数据库中,根据一个字段的值,来寻找一个文档,是很常见的操作.比如根据学号来找一个学生.这个学号是唯一的.只要有学号,就能唯一确认一个学生的文档.学号这个属性 ...

  3. Node_进阶_6

    Node进阶第六天 一.复习 cookie是在res中设置,req中读取的.第一次的访问没有cookie. cookie的存储大小有限,kv对儿.对用户可见,用户可以禁用.清除cookie.可以被篡改 ...

  4. Node_进阶_5

    Node进阶第五天 为什么mysql不用开mongod –dbpath xx… 答:因为mysql会在”服务”中运行,也就是开机时自动启动并且长久驻扎在内存中了. mongodb其实也能通过设置来设成 ...

  5. React-Native进阶_4.底部标签栏TabBar

    原生项目中,我们对底部Tab 很熟悉,点击Tab标签可以切换页面,那么在React-Native 中我们该怎么实现呢. 在查了文档后,我们找到了一个TabBarIos ,这个是ios 下使用的Tab ...

  6. Node_进阶_2

    第二天 一.复习: Node.js开发服务器.数据.路由.本地关心效果,交互. Node.js实际上是极客开发出的一个小玩具,不是银弹.有着别人不具备的怪异特点: 单线程.非阻塞I/O.事件驱动. 实 ...

  7. Node_进阶_1

    第一天 1.1简介 Node.js简介 V8引擎本身就是用于Chrome浏览器的JS解释部分,Ryan Dahl把这个V8搬到了服务器上,用于做服务器的软件. Node.js是一个让Javascrip ...

  8. Node_进阶_3

    Express框架: 一.   Express框架 Express框架是后台的Node框架,类似于JS中的jquery. #原生Node开发会有很多问题: 1呈递静态页面很不方便,需要处理每个HTTP ...

  9. PythonI/O进阶学习笔记_4.自定义序列类(序列基类继承关系/可切片对象/推导式)

    前言: 本文代码基于python3 Content: 1.python中的序列类分类 2. python序列中abc基类继承关系 3. 由list的extend等方法来看序列类的一些特定方法 4. l ...

随机推荐

  1. TESTUSERB 仅能对TESTUSERA 用户下的某些表增删改查、有些表仅能对某些列update,查询TESTUSERB 用户权限,获取批量赋予语句。

    TESTUSERB 仅能对TESTUSERA 用户下的某些表增删改查.有些表仅能对某些列update,查询TESTUSERB 用户权限,获取批量赋予语句. select 'grant '|| PRIV ...

  2. 脑图工具MindNode"附属节点"是什么意思 图解

    新手会发现在主节点上无论是按Tab子节点还是按Enter附属节点,都是向右延伸,感觉像没区别? 其实不然,从第二个节点开始,你再按 Tab 或者 Enter 就知道区别了. 废话少说,直接上图. 我觉 ...

  3. Unity 手机屏幕翻转问题 横屏

    1920*1080的图在1080*1920的设备上观看效果: 如果要做横屏游戏,就要改Build中的Player Settings,强制左旋转或右旋转,默认是Auto 垂直于地面的手机在横屏下分辨率是 ...

  4. day20 匿名函数,内置函数,面向过程编程

    目录 有名函数 匿名函数 max() min() sorted map filter 内置函数 面向过程编程 有名函数 def f1(): print('my name is f1') f1() my ...

  5. echarts如何更改表格主题颜色

    vue项目中,需要使用echarts时,需要根据UI设计图进行图标颜色修改 方法一: 1.在script中引入echarts以及主题样式: import echarts from 'echarts'; ...

  6. python_传递任意数量的实参

    '''def name(*args): #python创建一个空元组,将收到的所有值都封装在这个元组中 """打印所有姓名""" for i ...

  7. Jquery学习总结(4)——高效Web开发的10个jQuery代码片段

    在过去的几年中,jQuery一直是使用最为广泛的JavaScript脚本库.今天我们将为各位Web开发者提供10个最实用的jQuery代码片段,有需要的开发者可以保存起来. 1.检测Internet ...

  8. Html 播放 mp4格式视频提示 没有发现支持的视频格式和mime类型

    转自原文 Html 播放 mp4格式视频提示 没有发现支持的视频格式和mime类型 播放mp4格式的时候提示 Html 播放 mp4格式视频提示 没有发现支持的视频格式和mime类型 原因是在IIS中 ...

  9. 最全Pycharm教程(29)——再探IDE,速成手冊

    1.准备工作 (1)确认安装了Python解释器,版本号2.4到3.4均可. (2)注意Pycharm有两个公布版本号:社区版和专业版,详见 Edition Comparison Matrix 2.初 ...

  10. 什么是域名的TTL值? ——一条域名解析记录在DNS缓存服务器中的存留时间

    什么是域名的TTL值? 转自:http://hizip.net/index.php/archives/20/TTL(Time-To-Live),就是一条域名解析记录在DNS服务器中的存留时间.当各地的 ...