MongoDB

1 简介

MongoDB 是为快速开发互联网Web应用而设计的数据库系统,官方地址 https://www.mongodb.com/

数据库(DataBase)是按照数据结构来组织、存储和管理数据的仓库。是一个应用程序.

数据库:用于存储数据。可以通过命令操作数据。
关系型数据库(结构型数据库) : sql server mysql


行 列
商品信息表 goodsId goodsName goodsPrice createTime

   用户信息表

非关系型数据库(非结构数据库):no sql mongodb 日志处理。
库userList
集合collection my
文档 document {userName:”张三"}
{age:12}

2 数据库的设置

2.1 三个重要概念

  • 一个服务可以创建多个数据库
  • 数据库(database) 数据库是一个仓库,在仓库中可以存放集合
  • 集合(collection) 集合类似于JS中的数组,在集合中可以存放文档
  • 文档(document) 文档数据库中的最小单位,类似于 JS 中的对象,在 MongoDB 中每一条数据都是一个 JS 的对象

2.2 关闭服务

控制面板-》管理工具-》服务-》MongoDB server右击停止服务;右击属性将服务禁用

2.3 环境变量

打开控制台,输入mongo回车。
提示的内容如果是“不是内部命令”,需要配置环境变量。我的电脑--》属性-》高级系统设置-》高级-》系统变量-》path
C:\Program Files\MongoDB\Server\4.2\bin

3 数据库命令(增删改查)

3.1 基本命令

手动挂载数据库

mongo命令可以让我们进入到mongo的交互环境,在该环境当中可以通过命令操作数据库

1、创建一个文件夹mongo用于存放数据库文件。
2、执行命令: mongod --dbpath D:\mongo
3、将控制台最小化。(不要关闭控制台)
4、重新打开控制台,输入mongo命令。

其它命令

show dbs         :显示当前的数据库列表
show collections :显示当前数据库的集合列表
use admin        :进入到admin数据库
db               :查看当前所在的数据库。
db.dropDatabase():删除当前的数据库
db.createCollection("userList")  :创建一个名字为userList的集合
db.userList.drop(): 删除名字为userList的集合
db.scoreList.renameCollection("my"): 将当前数据库当中的scoreList集合更名为my

3.2 增加命令

//在userlist集合中插入一条文档。 会检测是否存在对应的库与集合,如果不存在会自动 创建。
db.userlist.insert({a:1,b:2,userName:"zhangsan"})// 插入多条数据
db.scorelist.insert([{userName:"李四"},{userName:"王五"}]// 导入数据:* 不要在mongo命令下导入,退出mongo环境。
mongoimport --db tiechui --collection scoreList --file D:\210225\Lession21\code\data.txt  --drop
// --db:指定数据库名
// --collection:指定集合名
// --file:指定导入的数据文件
// --drop:不是必填项。 省略该项,为追加。使用该项,会将之前的数据删除掉。

3.3 删除命令

// 删除满足条件的所有文 档db.scoreList.remove({sex:"男"})// 删除满足条件的第一条记录db.scoreList.remove({sex:"女"},{justOne:true})// 删除所有记录db.scoreList.remove({})

3.4 修改命令

// 更新一个
db.collection.updateOne(查询条件,要更新的内容[,配置对象])
// 批量更新
db.collection.updateMany(查询条件,要更新的内容[,配置对象])// 第一个参数是条件,第二个参数是修改内容。完整修改。db.scoreList.update({userName:"李昂"},{sex:"男"})// 条件年龄等于12,只修改名字为张三丰。只会修改第一个满足条件的文档db.scoreList.update({age:12},{$set:{userName:"张三丰"}})// 根据条件修改多条文档。加上{multi:true})才能多条db.scoreList.update({age:12},{$set:{sex:"女"}},{multi:true})// 当条件无法满足时,将upsert设置为true,可以增加一条记录db.scoreList.update({age:1000},{userName:"王振",sex:"男"},{upsert:true})// 满足条件的记录中的年龄加100db.scoreList.update({userName:"张三丰"},{$inc:{age:100}})

3.5 查找命令

// 根据条件查找一条记录
db.scoreList.findOne({age:12})//  将当前数据库下的scoreList集合中的文档进行显示。db.scoreList.find()// 统计当前数据库scoreList集合的文档数量db.scoreList.count()// 查找名字为王五的记录db.scoreList.find({userName:"王五"}))// 查找年龄为12的所有记录db.scoreList.find({age:12})// 查找年龄为12且性别为女。多条件查找db.scoreList.find({age:12,sex:"女"})// 模糊搜索:查找名字当中包含孙db.scoreList.find({userName:/孙/})// 年龄大于12的所有文档记录 db.scoreList.find({age:{$gt:12}})
// 年龄小于45的所有文档记录 db.scoreList.find({age:{$lt:45}})
// 年龄不等于12的所有文档记录 db.scoreList.find({age:{$ne:12}})
// 年龄在数组当中的所有文档记录db.scoreList.find({age:{$in:[45,22]}})
// 年龄大于12,小于等于45
db.scoreList.find({age:{$gt:12,$lte:45}})
/*$gt  大于$gte  大于等于$lt  小于$lte  小于等于$in  包含$ne  不等于
*/// 查找年龄为22或性别为男db.scoreList.find({$or:[{age:22},{sex:"男"}]})
// 查找年龄等于12且性别为女db.scoreList.find({$and:[{age:12},{sex:"女"}]})db.scoreList.find({age:12,sex:"女"})// 查找语文成绩为30 。*如果有特殊字符需要用双引号包裹。db.scoreList.find({"score.yuwen":30})// 排序:升序(正序):从小到大   降序(倒序):从大到小
// 按年龄的倒序db.scoreList.find().sort({age:-1})
// 年龄的正序db.scoreList.find().sort({age:1})
// 先按条件查找,将查找的结果进行正序。db.scoreList.find({sex:"女"}).sort({age:1})
// 按照年龄的正序排列,如果年龄相同,则按照语文的倒序db.scoreList.find().sort({age:1,"score.yuwen":-1})// 获取scoreList集合当中的前3条.* 如果写0,则相当于没写db.scoreList.find().limit(3)// 跳过文档数量2及以后db.scoreList.find().skip(2)// find sort limit skip 是可以结合使用的。
// 先排序,再skip,然后limitdb.scoreList.find().skip(9).limit(3).sort({age:1})
// (当前页-1)*每页显示的文档条数 === skipdb.scoreList.find().skip(0).limit(3).sort({age:1}) // 第一页db.scoreList.find().skip(3).limit(3).sort({age:1})// 第二页db.scoreList.find().skip(6).limit(3).sort({age:1})// 第三页db.scoreList.find().skip(9).limit(3).sort({age:1})// 第四页// 查找年龄为12db.scoreList.find({$where:function(){return this.age==12}})// 指定文 档显示的内容为:userName,不包含_iddb.scoreList.find({age:12},{userName:true,_id:false})

4 mongoose

4.1 介绍

Mongoose 是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能。 官网 http://www.mongoosejs.net/

4.2 作用

使用代码操作 mongodb 数据库

4.3 mongoose的使用

// 1、下载npm install mongoose
// 2、引入const mongoose = require("mongoose");
// 3、连接数据库
三种方法

4.4 连接数据库的第一种方式

// 通过回调函数得到结果
const mongoose = require("mongoose");
// 连接,第一个参数是连接的地址
// mongodb://127.0.0.1:27017 地址
// zhang  数据库的名字
mongoose.connect("mongodb://127.0.0.1:27017/zhang",{useNewUrlParser:true,// 使用最新的地址解析方式useUnifiedTopology:true// 使用最新监听器
},function (err) {if(err) {console.log("连接数据库失败")}else{console.log("连接数据库成功")}
})

4.5 连接数据库第二种方法

// 通过Promise接收连接数据库的结果
const mongoose = require("mongoose");
const con = mongoose.connect("mongodb://127.0.0.1:27017/zhang",{useNewUrlParser:true,// 使用最新的地址解析方式useUnifiedTopology:true// 使用最新监听器
})
con.then(value=>{console.log("数据库连接成功",value);
}).catch(reason => {console.error("数据库连接失败",reason);
})

4.6 连接数据库的第三种方法

// 通过事件监听来完成连接数据库
const mongoose = require("mongoose");
mongoose.connect("mongodb://127.0.0.1:27017/zhang",{useNewUrlParser:true,// 使用最新的地址解析方式useUnifiedTopology:true// 使用最新监听器
})
mongoose.connection.on("open",function () {console.log("连接数据库成功")
})
mongoose.connection.on("error",function () {console.log("连接数据库失败")
})

5 数据库的操作(增删改查)

5.1 数据类型

文档结构可选的字段类型列表

  • String
  • Number
  • Date
  • Buffer
  • Boolean
  • Mixed 任意类型(使用 mongoose.Schema.Types.Mixed 设置)
  • ObjectId
  • Array

CURD

数据库的基本操作包括四个,增加(create),删除(delete),修改(update),查(find)

5.2 数据库的基本操作

① 创建一个约束对象Schema

 const schema = new mongoose.Schema({userName:{type:String,// 类型是一个字符unique:true,// 内容不允许重复required:true// 不允许为空},age:{type:Number,default:18// 默认值},sex:{type:String,default:"男"},hobby:[Number],// 是一个数据,且数据元素的类型为数字qita:mongoose.Schema.Types.Mixed// 没有限制},{versionKey:false  //去掉_v})

② 创建一个数据模型,通过该模型指定操作的集合,以及获得操作的数据的方法

第一个参数是操作的集合名字,第二个参数为约束对象

 const model = mongoose.model("userList",schema);

③ 增加一条数据

result: 是插入集合中的数据。
_id: 唯一标识
userName,age是自己设置插入的内容
__v:versionKey 作用:为了解决获取与保存之间的冲突。

 ({userName:"张三",age:12},function (err,result) {if(err){console.error("插入失败",err);}else{console.log("插入成功",result);// { _id: 609e32eb54d23a3d180eaf42, userName: '张三', age: 12, __v: 0 }}})

5.3 插入数据

result 是 Promise的实例

 const result = model.create({userName:"老王1"})// result 是一个Promise实例result.then(value=>{console.log("成功插入",value)}).catch(reason=>{console.error("插入失败",reason)})console.log(result);

① 插入一条数据

 model.create({userName:"王五2",qita:"其它",},function (err,result) {if(err){console.error("插入失败",err);}else{console.log("插入成功",result);}})

② 插入多条数据

 model.create([{userName:"小刘"},{userName: "小兰"}]).then(value=>{console.log("成功",value);}).catch(reason => {console.error("失败",reason)})

或者

 model.insertMany([{userName: "大王1",age:12,},{userName: "小王1",sex:"女"}],function (err,result) {if(err){console.error(err);}else{console.log(result)}})

5.4 查找操作

① 将scoreList当中的数据罗列出来

第一个参数是条件,{}:无条件

model.find({},function (err,result) {// result 是一个数组,数组为符合条件的文 档console.log(result);})

② 将scoreList当中性别为女的记录进行显示

model.find({sex:"女"},function (err,result) {console.log(result);})

③ 搜索出来一条记录,根据ID进行搜索

 model.findOne({_id:"609e38672f9e444624439954"},function (err,result) {// result 是一个对象console.log(result)})

根据年龄搜索

model.findOne({age:18},function (err,result) {// result 是一个对象console.log(result)})

④ findById:根据ID进行搜索 相当于 model.find({_id:“609e38672f9e444624439954”})

model.findById("609e38672f9e444624439954",function (err,result) {console.log(result)})

⑤ 获得满足条件的文档数量

model.countDocuments({sex:"女"},function (err,count) {console.log(count)})

⑥ skip limit sort

model.find().skip(1).limit(2).sort({age:1}).exec(function (err,result) {if(err){console.error(err);}else{console.log(result);}})

⑦ select 投影

model.find().select({userName:true,_id:false}).exec(function (err,result) {console.log(result)})

5.5 更新

① 更新一条,第一个参数是条件,第二个参数是修改的内容

model.updateOne({age:18},{userName:"下课"},function (err,result) {console.log(result);})
model.updateOne({age:18},{$inc:{age:100}},function (err,result) {console.log(result);})

② 更新多条

model.updateMany({age:18},{sex:"女"},function (err,result) {console.log(result);})

5.6 删除

① 删除一条

 model.deleteOne({age:18},function (err,result) {console.log(result);})

② 删除多条

 model.deleteMany({age:18},function (err,result) {console.log(result);})

6 图形化操作

mongoose要挂载起来

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-stlySjsn-1621943318623)(C:\Users\王秀\AppData\Roaming\Typora\typora-user-images\image-20210515151828681.png)]

7 mongodb 配置密码

一、启动 mongod 带验证选项

# mongod --auth

二、创建用户

> use admin
> db.createUser({user:"admin",pwd:"password",roles:["root"]})

三、连接 mongod 服务

> mongo
> use admin
> db.auth("admin", "password")

四、mongoose 连接操作

mongoose.connect('mongodb://admin:password@localhost/prepare?authSource=admin');

8 关系型数据库(RDBS)

代表有:MySQL、Oracle、DB2、SQL Server…

​ .net c#

特点:关系紧密,都是表

优点:

1、易于维护:都是使用表结构,格式一致;

2、使用方便:通用,可用于复杂查询;

3、高级查询:可用于一个表以及多个表之间非常复杂的查询。

缺点:

1、读写性能比较差,尤其是海量数据的高效率读写;

2、有固定的表结构,字段不可随意更改,灵活度稍欠;

3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。

9 非关系型数据库(NoSQL not only SQL )

代表有:MongoDB、Redis…

特点:关系不紧密,有文档,有键值对

优点:

1、格式灵活:存储数据的格式可以是key,value形式。

2、速度快:nosql可以内存作为载体,而关系型数据库只能使用硬盘;

3、易用:nosql数据库部署简单。

缺点:

1、不支持事务;

2、复杂查询时语句过于繁琐。

  关系型数据库:库-》表-》行列创建表:指定字段的名字,指定类型,是否允许为空,指定长度。字段     是否允许为空    类型    长度userName   false        string   5age        false        int     2idid    userName   age1    zhangsan   12*************************************************非关系数据库 库-》集合-》文档文档:{}

10 storage canvas

存储:storage 画布canvas

10.1 新建get.html 在get中输入

<script>console.log(localStorage.userName);console.log(localStorage.getItem("sex"));console.log(localStorage["age"])
</script>

得到的结果是undefined,null, undefined

10.1 新建set.html 在get中输入

localStorage.userName = "zhangsan";
localStorage.setItem("age",16)
localStorage["sex"] = "男"

则在application中就会得到数据,且set.html中就会有值 为:张三,男,16

10.3 新建remove.html 输入

localStorage.clear();//将之前的数据都清空了
localStorage.removeItem("age") //只清空了年龄

合-》文档
文档:{}

## 10 storage    canvas 存储:storage    画布canvas 10.1 新建get.html 在get中输入```js
<script>console.log(localStorage.userName);console.log(localStorage.getItem("sex"));console.log(localStorage["age"])
</script>

得到的结果是undefined,null, undefined

10.1 新建set.html 在get中输入

localStorage.userName = "zhangsan";
localStorage.setItem("age",16)
localStorage["sex"] = "男"

则在application中就会得到数据,且set.html中就会有值 为:张三,男,16

[外链图片转存中…(img-0kGNkR1f-1621943318630)]

10.3 新建remove.html 输入

localStorage.clear();//将之前的数据都清空了
localStorage.removeItem("age") //只清空了年龄

MongoDB-数据库-mongoose-图形化操作相关推荐

  1. python界面设置-PYTHON图形化操作界面的编程七__创建菜单

    PYTHON图形化操作界面的编程七__创建菜单 十八.创建菜单 1.水平菜单的创建 创建菜单需要多条语句,所以这里通过实例来说明水平菜单的创建方法: 下面的语句可以在窗口中添加水平菜单,其中前四行语句 ...

  2. python函数做菜单_PYTHON图形化操作界面的编程七__创建菜单

    PYTHON图形化操作界面的编程七__创建菜单 十八.创建菜单 1.水平菜单的创建 创建菜单需要多条语句,所以这里通过实例来说明水平菜单的创建方法: 下面的语句可以在窗口中添加水平菜单,其中前四行语句 ...

  3. git只提交一张图片_Git 图形化操作之合并提交记录

    Git 图形化操作之合并提交记录 Git 图形化操作之合并提交记录 目录1.显示日志2.合并提交记录3.推送合并的提交 独立观察员 2020 年 9 月 24 日 前言:当我们使用 Git 时,有时会 ...

  4. 阿里云centos7安装和卸载图形化操作界面

    登录服务器,执行如下指令安装桌面环境: 安装 MATE Desktop yum groups install "MATE Desktop" 命令输入之后,会列出一大堆文字的,然后显 ...

  5. python数据库模糊查询_Python操作mongodb数据库进行模糊查询操作示例

    本文实例讲述了Python操作mongodb数据库进行模糊查询操作.分享给大家供大家参考,具体如下: # -*- coding: utf-8 -*- import pymongo import re ...

  6. Git 图形化操作之合并提交记录

    Git 图形化操作之合并提交记录 独立观察员 2020 年 9 月 24 日 目录 1.显示日志 2.合并提交记录 3.推送合并的提交 前言:当我们使用 Git 时,有时会遇到刚提交推送完一次修改,发 ...

  7. Python自动生成代码 - 通过tkinter图形化操作生成代码框架

    Python自动生成代码 - 通过tkinter图形化操作生成代码框架 背景 脚本代码 Demo_CodeGenerator.py display.py FileHandler.py: 脚本运行结果: ...

  8. GIT命令与图形化操作

    前言 GIT的操作,分为命令符操作和图形化操作.上网搜了许多帖子,都是一些命令符,图形化的操作很少.本人认为,虽然命令符操作起来很流畅,有一种高手的风范,但对于一些初学者来说,还是比较陌生.图形化工具 ...

  9. 前端笔记之NodeJS(四)MongoDB数据库Mongoose自制接口MVC架构思想|实战

    一.MongoDB数据库 1.1 NoSQL简介 随着互联网web2.0网站的兴起,传统的SQL数据库(关系数据库)在应付web2.0网站,特别是超大规模和高并发的SNS(social network ...

  10. linux系统界面图形化操作步骤

    X-manger是一套很实用的远程工具,它可以图形化,web开发,linux-windows互传文件等,如需要破解下载:https://pan.baidu.com/s/1aKzAzwJJjnhHDjT ...

最新文章

  1. iOS 向下取整、向上取整、四舍五入
  2. vue_组件_监听组件事件
  3. 浅谈 SQL Server 内部运行机制
  4. JS中split对多个分隔符的处理
  5. 关于jsp:include 动态引入的值传递问题(数据共享问题)
  6. jQuery常用语法总结
  7. Python对zip、tgz、rar压缩包的解压与读取
  8. hibernate java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z
  9. java过滤器Filter实现敏感词汇过滤
  10. 大文件怎样实现快速上传?
  11. Java好还是网优好,java和seo哪个好
  12. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
  13. pdf转换工具有哪些?试一试这几个方法!
  14. coc机器人苹果_警察机器人绳索英雄
  15. 【树莓派基础小实验笔记】1. 点亮LED二极管
  16. 网址短连接 short url
  17. pages文稿进去显示服务器,pages要提供服务器地址
  18. 哈姆雷特与雷欧斯提的决斗
  19. springboot毕设项目宠物领养平台f2308(java+VUE+Mybatis+Maven+Mysql)
  20. 【python解决SQLAlchemy+MySQL插入数据时报警告Warning: (1366, “Incorrect string value: ‘\\xD6\\xD0\\xB9\\xFA\\xB】

热门文章

  1. 正交试验设计例题及答案_正交表测试用例设计方法的特点是什么?
  2. OOA OOD OOP
  3. php 整行插入mysql_MySQL的多行插入
  4. 信安教程第二版-第11章网络物理隔离技术原理与应用
  5. 概率图模型更进一步的知识点
  6. jQuery ajax模板及各参数介绍
  7. 图书馆管理系统——还书和延期操作
  8. ROS官网新手级教程总结
  9. 从零开始实现数据结构(一) 动态数组
  10. nw.js package一般设置