隔壁孩子10篇博客node入门而且写了一个前后端分离项目,你怎么还在睡觉!!!(五)

Rosalba ·
更新时间:2024-09-21
· 917 次阅读

————————————————————————————————————————————————————————————
-----------------今日份复习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数据}) 也可以实现新增数据
例如: 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岁的歌星 大于 gt小于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 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 实现一个具有登录注册,增删查改的新闻系统
——————————————————————————————————
————————————————


作者:Kang+丶



node入门 前后端分离 node

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章