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

————————————————————————————————————————————————————————————
-----------------今日份复习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 退出数据库管理模式

    扫描二维码关注公众号,回复: 10309198 查看本文章

    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岁的歌星 大于 g t 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 实现一个具有登录注册,增删查改的新闻系统
——————————————————————————————————
————————————————

发布了85 篇原创文章 · 获赞 16 · 访问量 6078

猜你喜欢

转载自blog.csdn.net/qq_43955202/article/details/105196797
今日推荐