————————————————————————————————————————————————————————————
-----------------今日份复习nodejs----------------------------
----- Mongodb数据可以介绍
----- Mongodb数据库操作
————————————————————————————————————————————————————————————
————————————————
1.数据库引言
1.1 数据库用来做什么?
存储数据。
1.2 什么是数据库?
数据库(Database)是按照数据结构来组织,存储和管理数据的仓库。主要用他进行管理各种系统的数据,作为科学研究和决策的重要技术手段。
1.3 关系型数据库
按照关系模型存储数据的数据库,数据与数据之间的关联非常密切,可以实现跨数据表查询数据,占用更少的硬盘实现更多数据存储。
T-SQL标准的结构化查询语言是关系型数据库的通用查询语言。
关系型数据库:Access, mysql ,sqlServer, oracle, db2等
1.3.2 关系型数据库的优势
- 复杂查询
可以使用SQL语句方便的在多个表之间做非常复杂的数据查询。 - 事务支持
- 使得对于安全性能很高的数据访问要求得以实现。
1.4 非关系型数据库
不按关系模型存储数据的数据库统称为noSQL。
一层含义:不是SQL,不是关系型数据库。
第二层含义,not only SQL,不仅仅是SQL。
非关系型数据库: MongoDB, Redis, Hbase, CouchDB, SQLite等
1.4.2 非关系型数据库的优势
- 性能
NOSQL是基于键值对的,可以想象表中的主键和值得对应关系,而且不需要经过sql层得解析,所以性能非常高。 - 可扩展性
同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
1.5对比
关系型数据库结构:一台服务器 -> 数据库 -> 数据表 -> 数据行
非关系型数据库结构:一台服务器 -> 数据库 -> 集合 -> 文档
2.MongoDB数据库
2.1 MongoDB数据库简介
MongoDB是一个基于分布式文件存储的数据库。由c++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是非关系型数据库当中功能最丰富,最像关系型数据库的。
2.2 MongoDB数据库优点
他的特点是高性能,易部署,易使用,存储数据非常方便;
MongoDB以BSON(二进制 + JSON)格式进行数据存储,可以直接对象,数组。
2.3 MongoDB的安装
- 下载mongoDB http://www.mongodb.com
- 寻找我们完整安装的mongoDB
在计算机C盘中寻找 Program files -> Mongodb - 将mongoDB配置为全局变量(设置环境变量)
将mongodb的bin文件夹路径添加进全局环境变量path中。
在cmd中运行 mongo 出现以下界面,表明加入全局变量成功。
2.4 创建文件夹
- 在非系统盘下(D盘)创建一个文件夹 叫做 mongodb,再创建两个子文件夹db和log
- 位置:\mongoddb \mongodb\db \mongodb\log
- 图示
2.5 将mongoDB挂载成为windows服务
- 1.使用命令行挂载服务
//告诉计算机将数据库放在以下文件中去
mongod --dbpath "d:\mongodb\db"
//告诉服务器将日志文件放在以下文件夹中去
--logpath "d:\mongodb\log\mongodb.log"
//挂载成为windows服务
--install --serviceName "MongoDB"
这时候就会在服务与程序中发现一个叫做MongoDB Server服务
-
2.补充服务的命令
+ 服务开启的命令 net start mongodb
+ 服务关闭的命令 net stop mongodb
+ 卸载服务的命令 sc delete mongodb
我们以服务员身份打开cmd运行以上命令就会出现以下结果
3.MongoDB的基本使用
3.1MongoDB的基本命令
mongo进入数据库管理模式
exit 退出数据库管理模式3.2MongoDB的常用命令
- (1)数据库命令
show dbs 显示所有的数据库列表
use + 数据库名 如果数据库存在那么就进入数据库 如果不存在就创建数据库
db 查看当前数据库
db.dropDatabase() 删除数据库 - (2)集合命令
show collections显示当前数据库的所有集合
db.集合名.insert({}) 创建集合并且添加数据进去
通常在创建数据时自动创建集合,不需要单独创建
==db.集合名.drop()==删除集合3.3MongoDB的文档命令(对数据的操作)
- 新增数据
db.集合名.insert({BSON数据}) 新增数据
db.集合名.save({BSON数据}) 也可以实现新增数据
例如:
- (1)数据库命令
db.user.insert({"name":"admin","age":"10"})
db.user.insert({"name":"admin","password":"123456"})
非关系型数据库也可以插入不同键名的数据
db.user.insert({"name":"admin","password":"123456","age":18,"qq":"861918672})
insert()和save()方法的区别:
insert()是单纯的向数据库添加数据。
save()也是向数据库添加数据,如果数据库中的数据已经存在该数据则更新数据。更新的话需要传入该条数据的id。
- 查找数据
db.集合名.find() 查看当前集合下所有的数据
举例:
db.user.find();
结果:
{ "_id" : ObjectId("5e815bd6424a337d44c4d41b"), "name" : "admin", "password" : "123456" }
{ "_id" : ObjectId("5e815be0424a337d44c4d41c"), "name" : "admin", "password" : "123456" }
db.集合名.find({条件对象}) 按照条件对象来查找
举例:
db.user.find({"age":"20"})
结果:
{ "_id" : ObjectId("5e815e51424a337d44c4d41f"), "name" : "admin", "age" : "20" }
db.集合名.find().pretty() 格式化输出json对象
举例:
对比:
db.user.find();
{ "_id" : ObjectId("5e815e4c424a337d44c4d41e"), "name" : "admin", "age" : "10" }
{ "_id" : ObjectId("5e815e51424a337d44c4d41f"), "name" : "admin", "age" : "20" }
{ "_id" : ObjectId("5e815e55424a337d44c4d420"), "name" : "admin", "age" : "30" }
{ "_id" : ObjectId("5e815e58424a337d44c4d421"), "name" : "admin", "age" : "34" }
{ "_id" : ObjectId("5e815e69424a337d44c4d422"), "name" : "admin", "age" : "24" }
db.user.find().pretty();
{
"_id" : ObjectId("5e815e4c424a337d44c4d41e"),
"name" : "admin",
"age" : "10"
}
{
"_id" : ObjectId("5e815e51424a337d44c4d41f"),
"name" : "admin",
"age" : "20"
}
{
"_id" : ObjectId("5e815e55424a337d44c4d420"),
"name" : "admin",
"age" : "30"
}
{
"_id" : ObjectId("5e815e58424a337d44c4d421"),
"name" : "admin",
"age" : "34"
}
{
"_id" : ObjectId("5e815e69424a337d44c4d422"),
"name" : "admin",
"age" : "24"
}
- 修改数据
db.集合名.update(查找对象,修改结果) 修改数据 主键不能修改
举例:
> db.user.find({"name":"mr.kang"})
{ "_id" : ObjectId("5e8160d8424a337d44c4d423"), "name" : "mr.kang", "age" : 20 }
//修改数据 将这条数据的age更改为100
> db.user.update({"name":"康家豪"},{"age":100})
> WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> 结果:
> { "_id" : ObjectId("5e8160d8424a337d44c4d423"), "age" : 100 }
我们可以注意到ObjectId并没有发生改变。
- 删除数据
db.user.remove({}) 删除user集合下的所有数据
代码演示:
> db.user.remove({})
WriteResult({ "nRemoved" : 6 })
db.user.remove({条件}) 按照条件删除数据
代码演示:
//删除name为li的这条数据
> db.user.remove({"name":"li"})
WriteResult({ "nRemoved" : 1 })
> db.user.find()
{ "_id" : ObjectId("5e816429424a337d44c4d424"), "name" : "kang", "age" : 18 }
{ "_id" : ObjectId("5e816433424a337d44c4d425"), "name" : "wang", "age" : 20 }
>
4.MongoDB数据库的高级用法
先添加一组singer数据:
db.singer.insert({
"num" : "1",
"name" : "刘德华",
"country":"中国",
"sex" : "男",
"age" : 55,
"score":100,
"works" : ["爱你一万年", "忘情水", "来生缘", "我不够爱你"],
"description" : "1961年9月27日出生于中国香港,演员、歌手、作词人、制片人,影视歌多栖发展的代表艺人之一。"
});
db.singer.insert({
"num" : "2",
"name" : "张学友",
"country":"中国",
"sex" : "男",
"age" : 55,
"score":90,
"works" : ["一路上有你", "你好毒", "想和你去吹吹风"],
"description" : "1961年7月10日出生于香港,中国香港男歌手、演员,毕业于香港崇文英文书院。1984年因获得首届香港十八区业余歌唱大赛冠军而出道。"
});
db.singer.insert({
"num" : "3",
"name" : "黎明",
"country":"中国",
"sex" : "男",
"age" : 50,
"score":88,
"works" : ["今夜你会不会来"],
"description" : "1966年12月11日生于北京,歌手、演员、导演、商人、慈善事业工作者。"
});
db.singer.insert({
"num" : "4",
"name" : "郭富城",
"country":"中国",
"sex" : "男",
"age" : 51,
"score":70,
"works" : ["对你爱不完", "动起来", "我是不是该安静的走开"],
"description" : "1965年10月26日出生于香港,华语流行男歌手、演员、舞者,演唱会舞蹈总监,华语歌坛劲歌热舞代表人物之一。"
});
db.singer.insert({
"num" : "5",
"name" : "薛之谦",
"country":"中国",
"sex" : "男",
"age" :33,
"score":95,
"works" : ["认真的雪"],
"description" : "1983年7月17日出生于上海,华语流行乐男歌手、音乐制作人、演员、商人,毕业于格里昂酒店管理学院。"
});
db.singer.insert({
"num" : "6",
"name" : "李宇春",
"country":"中国",
"sex" : "女",
"age" : 32,
"score":65,
"works" : ["梨花香", "蜀绣"],
"description" : "1984年3月10日出生于成都,中国流行女歌手、词曲创作人、电影演员、演唱会导演。"
});
db.singer.insert({
"num" : "7",
"name" : "周杰伦",
"country":"中国",
"sex" : "男",
"age" : 37,
"score":59,
"works" : ["青花瓷","双截棍","七里香","发如雪","简单爱"],
"description" : "1979年1月18日出生于台湾省新北市,中国台湾流行乐男歌手、音乐人、演员、导演、编剧、监制、商人。"
});
db.singer.insert({
"num" : "8",
"name" : "赵丽颖",
"country":"中国",
"sex" : "女",
"age" : 29,
"score":69,
"works" : ["花千骨插曲不可说"],
"description" : "1987年10月16日出生于河北省廊坊市,中国内地影视女演员。"
});
db.singer.insert({
"num" : "9",
"name" : "黄龄",
"country":"中国",
"sex" : "女",
"age" : 29,
"score":88,
"works" : ["high歌", "痒"],
"description" : "1987年2月13日出生于上海市,中国内地流行乐女歌手、戏剧演员。"
});
db.singer.insert({
"num" : "10",
"name" : "PSY",
"country":"韩国",
"sex" : "男",
"age" : 39,
"score":39,
"works" : ["江南style"],
"description" : "1977年12月31日出生于韩国首尔,韩国歌手。"
});
db.singer.insert({
"num" : "11",
"name" : "杰克逊",
"country":"美国",
"sex" : "男",
"age" : 51,
"score":0,
"works" : ["beat it"],
"description" : "1958年8月29日在美国印第安纳州加里市出生,美国歌手、词曲创作人、舞蹈家、表演家、慈善家、音乐家、人道主义者、和平主义者、慈善机构创办人。"
});
db.singer.insert({
"num" : "12",
"name" : "杨坤",
"country":"中国",
"sex" : "男",
"age" : 44,
"score":90,
"works" : ["无所谓", "月亮代表我的心"],
"description" : "1972年12月18日生于内蒙古包头,中国创作歌手。2001年5月,杨坤正式签约北京竹书文化唱片公司。发行第一张专辑《无所谓》。"
});
db.singer.insert({
"num" : "13",
"name" : "刘欢",
"country":"中国",
"sex" : "男",
"age" : 43,
"score":80,
"works" : ["玩玩的月亮", "从头再来"],
"description" : "生于1963年8月26日,流行音乐家,对外经济贸易大学音乐教授。"
});
db.singer.insert({
"num" : "14",
"name" : "王菲",
"country":"中国",
"sex" : "女",
"age" : 46,
"score":70,
"works" : ["相约1998", "红豆", "容易受伤的女人"],
"description" : "王菲,中国著名女歌手、影视演员,是1990年代初期至今华语乐坛最出色的女歌手之一,被公认为乐坛天后。"
});
db.singer.insert({
"num" : "15",
"name" : "林志炫",
"country":"中国",
"sex" : "男",
"age" : 46,
"score":80,
"works" : ["单身情歌"],
"description" : "1966年7月6日生于台湾,歌手、音乐制作人。"
});
4.1条件查找
案例1:查找女歌星
思路:查找sex = “女” 条件
db.singer.find({"sex":"女"})
结果:
{
"_id" : ObjectId("5e817121424a337d44c4d42c"),
"num" : "6",
"name" : "李宇春",
"country" : "中国",
"sex" : "女",
"age" : 32,
"score" : 65,
"works" : [
"梨花香",
"蜀绣"
],
"description" : "1984年3月10日出生于成都,中国流行女歌手、词曲创作人、电影演员、演唱会导演。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d42e"),
"num" : "8",
"name" : "赵丽颖",
"country" : "中国",
"sex" : "女",
"age" : 29,
"score" : 69,
"works" : [
"花千骨插曲不可说"
],
"description" : "1987年10月16日出生于河北省廊坊市,中国内地影视女演员。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d42f"),
"num" : "9",
"name" : "黄龄",
"country" : "中国",
"sex" : "女",
"age" : 29,
"score" : 88,
"works" : [
"high歌",
"痒"
],
"description" : "1987年2月13日出生于上海市,中国内地流行乐女歌手、戏剧演员。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d434"),
"num" : "14",
"name" : "王菲",
"country" : "中国",
"sex" : "女",
"age" : 46,
"score" : 70,
"works" : [
"相约1998",
"红豆",
"容易受伤的女人"
],
"description" : "王菲,中国著名女歌手、影视演员,是1990年代初期至今华语乐坛最出色的女歌手之一,被公认为乐坛天后 。"
}
案例2:查找年龄大于50岁的歌星 大于 g t 小 于 gt 小于 gt小于lt
思路: “age” > 50
> db.singer.find({"age":{$gt:50}}).pretty()
{
"_id" : ObjectId("5e817121424a337d44c4d427"),
"num" : "1",
"name" : "刘德华",
"country" : "中国",
"sex" : "男",
"age" : 55,
"score" : 100,
"works" : [
"爱你一万年",
"忘情水",
"来生缘",
"我不够爱你"
],
"description" : "1961年9月27日出生于中国香港,演员、歌手、作词人、制片人,影视歌多栖发展的代表艺人之一。"
}
{
"_id" : ObjectId("5e817121424a337d44c4d428"),
"num" : "2",
"name" : "张学友",
"country" : "中国",
"sex" : "男",
"age" : 55,
"score" : 90,
"works" : [
"一路上有你",
"你好毒",
"想和你去吹吹风"
],
"description" : "1961年7月10日出生于香港,中国香港男歌手、演员,毕业于香港崇文英文书院。1984年因获得首届香港十八区业余歌唱大赛冠军而出道。"
}
{
"_id" : ObjectId("5e817121424a337d44c4d42a"),
"num" : "4",
"name" : "郭富城",
"country" : "中国",
"sex" : "男",
"age" : 51,
"score" : 70,
"works" : [
"对你爱不完",
"动起来",
"我是不是该安静的走开"
],
"description" : "1965年10月26日出生于香港,华语流行男歌手、演员、舞者,演唱会舞蹈总监,华语歌坛劲歌热舞代表人物 之一。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d431"),
"num" : "11",
"name" : "杰克逊",
"country" : "美国",
"sex" : "男",
"age" : 51,
"score" : 0,
"works" : [
"beat it"
],
"description" : "1958年8月29日在美国印第安纳州加里市出生,美国歌手、词曲创作人、舞蹈家、表演家、慈善家、音乐家、人道主义者、和平主义者、慈善机构创办人。"
}
注意:大于等于是这样的
> db.singer.find({"age":{$gte:50}}).pretty()
案例3:查找年龄在30-40岁之间的歌星(查询指定范围歌星)
思路: "age"> 30 && age < 40
db.singer.find({"age":{$gte:30,$lte:40}})
结果:
> db.singer.find({"age":{$gte:30,$lte:40}}).pretty()
{
"_id" : ObjectId("5e817121424a337d44c4d42b"),
"num" : "5",
"name" : "薛之谦",
"country" : "中国",
"sex" : "男",
"age" : 33,
"score" : 95,
"works" : [
"认真的雪"
],
"description" : "1983年7月17日出生于上海,华语流行乐男歌手、音乐制作人、演员、商人,毕业于格里昂酒店管理学院。"
}
{
"_id" : ObjectId("5e817121424a337d44c4d42c"),
"num" : "6",
"name" : "李宇春",
"country" : "中国",
"sex" : "女",
"age" : 32,
"score" : 65,
"works" : [
"梨花香",
"蜀绣"
],
"description" : "1984年3月10日出生于成都,中国流行女歌手、词曲创作人、电影演员、演唱会导演。"
}
{
"_id" : ObjectId("5e817121424a337d44c4d42d"),
"num" : "7",
"name" : "周杰伦",
"country" : "中国",
"sex" : "男",
"age" : 37,
"score" : 59,
"works" : [
"青花瓷",
"双截棍",
"七里香",
"发如雪",
"简单爱"
],
"description" : "1979年1月18日出生于台湾省新北市,中国台湾流行乐男歌手、音乐人、演员、导演、编剧、监制、商人。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d430"),
"num" : "10",
"name" : "PSY",
"country" : "韩国",
"sex" : "男",
"age" : 39,
"score" : 39,
"works" : [
"江南style"
],
"description" : "1977年12月31日出生于韩国首尔,韩国歌手。"
}
案例4:查询外国歌手
思路: 不等于中国歌手
db.singer.find({"country":{$ne:"中国"}})
> db.singer.find({"country":{$ne:"中国"}}).pretty()
{
"_id" : ObjectId("5e817122424a337d44c4d430"),
"num" : "10",
"name" : "PSY",
"country" : "韩国",
"sex" : "男",
"age" : 39,
"score" : 39,
"works" : [
"江南style"
],
"description" : "1977年12月31日出生于韩国首尔,韩国歌手。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d431"),
"num" : "11",
"name" : "杰克逊",
"country" : "美国",
"sex" : "男",
"age" : 51,
"score" : 0,
"works" : [
"beat it"
],
"description" : "1958年8月29日在美国印第安纳州加里市出生,美国歌手、词曲创作人、舞蹈家、表演家、慈善家、音乐家、人道主义者、和平主义者、慈善机构创办人。"
}
案例5:in字句:(枚举) 不属于 nin
db.singer.find({"key":{$in:[数组]}})
> db.singer.find({"name":{$in:["刘德华","薛之谦"]}}).pretty()
{
"_id" : ObjectId("5e817121424a337d44c4d427"),
"num" : "1",
"name" : "刘德华",
"country" : "中国",
"sex" : "男",
"age" : 55,
"score" : 100,
"works" : [
"爱你一万年",
"忘情水",
"来生缘",
"我不够爱你"
],
"description" : "1961年9月27日出生于中国香港,演员、歌手、作词人、制片人,影视歌多栖发展的代表艺人之一。"
}
{
"_id" : ObjectId("5e817121424a337d44c4d42b"),
"num" : "5",
"name" : "薛之谦",
"country" : "中国",
"sex" : "男",
"age" : 33,
"score" : 95,
"works" : [
"认真的雪"
],
"description" : "1983年7月17日出生于上海,华语流行乐男歌手、音乐制作人、演员、商人,毕业于格里昂酒店管理学院。"
}
案例6:排序(1代表升序,-1代表降序)
根据分数score排序
db.singer.find().sort({"key":-1,"key2":1})
案例7:模糊查询 加i不区分大小写
db.singer.find({"name":/刘/i})
//查找出所有姓刘的明星
> db.singer.find({"name":/刘/i}).pretty()
{
"_id" : ObjectId("5e817121424a337d44c4d427"),
"num" : "1",
"name" : "刘德华",
"country" : "中国",
"sex" : "男",
"age" : 55,
"score" : 100,
"works" : [
"爱你一万年",
"忘情水",
"来生缘",
"我不够爱你"
],
"description" : "1961年9月27日出生于中国香港,演员、歌手、作词人、制片人,影视歌多栖发展的代表艺人之一。"
}
{
"_id" : ObjectId("5e817122424a337d44c4d433"),
"num" : "13",
"name" : "刘欢",
"country" : "中国",
"sex" : "男",
"age" : 43,
"score" : 80,
"works" : [
"玩玩的月亮",
"从头再来"
],
"description" : "生于1963年8月26日,流行音乐家,对外经济贸易大学音乐教授。"
}
其他方法大家有需求的话就去百度查找,这里只列举了一部分比较常用的方法。
————————————————————————————————————
写在后面
隔壁孩子10篇博客node入门而且写了一个前后端分离项目,你怎么还在睡觉!!!(六)
mongoose学习
使用express + mongoDB + mongoose 实现一个具有登录注册,增删查改的新闻系统
——————————————————————————————————
————————————————