1.NoSQL 介绍
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是 SQL”, 它指的是非关系型的数据库,是以 key-value形式存储,和传统的关系型数据库不一样, 不一定遵循传统数据库的一些基本要求,比如说遵循 SQL 标准、ACID 属性、表结构等等。 NoSQL 最早被提出是在 20 世纪 80 年代,在当时更多是强调的是与关系数据库区别对待, 最近这些年被提及的更多是强调协助解决大数据等相关问题。 NoSQL 在大数据时代有自己的意义。
2.NoSql 和传统数据库简单对比。
非结构型数据库。 没有行、列的概念。 用 JSON 来存储数据。(对于不会sql的人可以降低学习成本。)
3.MongoDb 介绍
MongoDB 是一个介于关系数据库和非关系数据库之间的产品, 是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复杂的数据类型。 Mongo 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言, 几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它的特点是高性能、 易部署、易使用, 存储数据非常方便。
4.MongoDb 安装
官网下载: https://www.mongodb.com/
我下载的是这个版本:
安装过程可能遇到:无法安装图形化界面compass,导致安装一直卡住。可以关闭窗口重新安装,重新安装时取消勾选安装图形化界面compass。
安装完成后配置环境变量将bin
路径加入到系统的path
环境变量中。
打开 cmd 输入 : mongo
命令看看是否成功。如果出来下图说明 mongodb
配置成功。
5. 使用 MongoDb
(1)先新建一个存放数据库的文件夹, 注意:不能有中文和空格,建议不要放在 C 盘
(2)启动 MongoDb 服务
mongod 开启数据库服务命令: mongod --dbpath D:\mongodb
(3)客户端输入命令连接服务端:mongo
6.建库、建表、查、改、增、删
(1)命令:use person
如果person数据库存在,则进入数据库。
如果数据库未创建, 那么必须创建一个表并插入一个数据以来创建该数据库。
数据库中不能直接插入数据,只能往集合(collections)中插入数据。 不需要专门创建集合,只需要写点语法插入数据就会创建集合student:
db.student.insert({“name”:”xiaoming”})
(2)命令:show dbs,可以看到所有的数据库,包括刚才创建的person,前面三个是本来就有的。
image.png
(3)命令:show collections,查看数据库中的表。还是要先进入数据库,下图可看到刚才创建的student表。
image.png
(4)删除数据库与删除表:
删除当前所在的数据库:
db.dropDatabase()
删除指定的表: db.collections_name.drop()
db.student.drop()
ps:关于如何修改数据库名称:https://segmentfault.com/q/1010000000694527
(5)插入(增加) 数据:
db.表名.insert({"name":"zhangsan"})
(6)查询:先列这几条。
1、查询所有记录
db.student.find()
相当于: select* from student;
2、查询去掉后的当前聚集集合中的某列的重复数据
db.student.distinct("name")
会过滤掉 name 中的相同数据
相当于: select distict name from student;
3、查询 age = 22 的记录
db.student.find({"age": 22})
相当于: select * from student where age = 22。
4、匹配的数据的数量:count()
db.student.find({"age": 22}).count()
明天再写了。今天浪费了许多时间,很难受。
更多关于查询:
http://www.jb51.net/article/48216.htm
http://blog.csdn.net/sgear/article/details/8649550
(7)修改数据
1.查找名字叫做小明的,把年龄更改为 16 岁:
db.student.update({"name":"xiaoming"},{$set:{"age":16}})
2.更改所有匹配项目:
默认下,update()只更改第一个匹配项,但在方法传入第三个参数为{multi: true}时,可更改所有匹配项。
db.student.update({"sex":"男"},{$set:{"age":33}},{multi: true})
3.完全替换, 不出现$set 关键字了: 注意
例:db.student.remove({"name": "xiaoming"});
(8)删除数据:
db.collectionsName.remove( { "borough": "Manhattan" } )
默认下,remove()会删除所有的匹配项。可传入第二个参数{justOne: true}来只删除第一个匹配项。
db.student.remove( { "age": 18}, { justOne: true } )
清空表中所有数据:
db.student.remove({})
删除文档是永久性的,不能撤销,也不能恢复的。因此,在执行remove()函数前先用find()命令来查看下是否正确。
7.关于ObjectId
http://www.runoob.com/mongodb/mongodb-objectid.html
MongoDB中的文档(对象)必须有一个"_id"键。这个键的值可以是任何类型的,默认是个ObjectId对象。
在一个集合里面,每个文档都有唯一的"_id"值,来确保集合里面每个文档都能被唯一标识。
MongoDB采用ObjectId,而不是其他比较常规的做法(比如自动增加的主键)的主要原因,因为在多个 服务器上同步自动增加主键值既费时又费力。
当需要通过"_id"来查找对象时,不能直接查找,要先转化为ObjectID对象:
var ObjectID = require('mongodb').ObjectID;
var id = new ObjectID(id);
8.Nodejs 自启动工具 supervisor
supervisor 会不停的 watch 你应用下面的所有文件,发现有文件被修改,就重新载入程序文件这样就实现了部署,修改了程序文件后马上就能看到变更后的结果。(但是当有错误时还是要重新启动。)
(1) 首先安装 supervisor
npm install -g supervisor
(2) 使用 supervisor 代替 node 命令启动应用(要是命令再短点就更好了)
image.png
如有错误请斧正,感谢大家。
网友评论