mongoose入门以及mongoose实现数据的增删改查
什么是mongoose?
-
mongoose的简介
-
mongoose是在node.js异步环境下对mongodb进行辩解操作的对象模工具。
-
mongoose是
node的驱动
,不能作为其他语言的驱动。
-
-
mongoose两个特点
-
通过关系型数据库的思想来设计
非关系型数据库
-
基于
mongodb驱动
,简化操作
-
-
理解mongoose(
三个基本概念
)-
Schema
: 相当于一个数据库的模板
·. Model可以通过mongoose.model 集成其基本属性内容. 当然也可以选择不继承. -
Model
: 基本文档数据的父类,通过集成Schema定义的基本方法和属性得到相关的内容的模型
. -
Instance
: 通过 new Model()初始化得到的数据
.
-
mongoose的安装以及使用流程
说明:本人使用VS Code编译器进行操作演示
-
新建一个文件夹📁(test)作为项目目录并放置工作区(项目名不能为mongoose,否则无法安装mongoose)
-
在项目目录新建一个.js文件📃(conndb.js)
-
在test目录下进行操作
-
初始化—在终端执行**
npm init --yes
**生成package.json
文件 -
安装mongoose—在终端执行**
npm install mongoose --save
**
-
-
在conndb.js文件中操作(此模块只做引入连接)
-
引入mongoose
var mongoose=require("momgoose")
-
与数据库建立连接
mongoose.connect( 'mongodb://127.0.0.1:27017/may', {useUnifiedTopology:true,useNewUrlParser:true}, function(err){ if(err){ console.log("连接失败!!!"); }else{ console.log("连接成功~~~"); } } )
参数一:连接地址
【mongodb协议://IP地址:端口号/数据库名】
参数二:使用解析器来解析本次连接
参数三:设置回调函数
-
使用commonJS规范导出
module.exports = mongoose
⚠️:以上三个步骤完成后,在终端输入
node conndb
查看是否连接成功
-
-
新建一个fruits.js文件(此模块处理fruits的增删改查)
-
引入连接数据库的代码
var db = require("./conndb")
-
定义Schema:创建集合fruits对应的模板(相当于表结构,在node.js里创建一个表结构)
let fruitSchema = new db.Schema({ 'name':String, 'price':Number })
😊:Schema通过限制输入的字段类型来定义documents的基本字段和集合
-
创建Model:把数据库中集合users和模版进行对应和绑定,建立通道
let fruitModel = db.model('fruits',fruitSchema)
参数一:集合名
参数二:定义的Schema
😊:Model才是操作数据库最直接的一块内容. 我们所有的CRUD就是围绕着Model 展开的
-
把数据可以通过这个通道插入进去
let object ={ 'name':"苹果", 'price':10 }
-
将obj数据放入刚刚创建的模型中(相当于把内存中的数据放在硬盘上)
let fruitEntity = new fruitModel(object)
-
进行增删改查操作(⚠️:每次操作都需要在终端输入
node fruits.js
重新连接)-
增加数据:
save()
,create()
,insertMany()
fruitEntity.save((err,data)=>{ if(!err){ console.log("添加成功!"); console.log(data) } })
-
更新数据:
updateOne()
:更改一条数据,updateMany()
:更改多条数据fruitModel.updateOne({"name":"香蕉"},{$set:{"name":"梨"}}).then((data)=>{ console.log(data) console.log("更新成功") },(err)=>{ console.log("查询失败") })
-
查询数据
-
查询全部数据:
find()
fruitModel.find().then((data)=>{ console.log(data); console.log("查询成功") },(err)=>{ console.log("查询失败") })
-
按照自定义条件查询所有数据:
find({key:value})
fruitModel.find({"name":"柠檬"}).then((data)=>{ console.log(data); console.log("查询成功") },(err)=>{ console.log("查询失败") })
-
按照自定义的条件查询一条数据:
findOne({key:value})
fruitModel.findOne({"name":"柠檬"}).then((data)=>{ console.log(data); console.log("查询成功") },(err)=>{ console.log("查询失败") })
-
条件查询:
$lt 小于
,$lte 小于等于
,$gt 大于
,$gte 大于等于
,$ne 不等于
fruitModel.find({"price":{$ne:"10"}}).then((data)=>{ console.log(data); console.log("查询成功") },(err)=>{ console.log("查询失败") })
-
去重:
distinct('字段名')
fruitModel.distinct('name').then((data)=>{ console.log(data); console.log("去重查询成功") },(err)=>{ console.log("去重查询失败") })
-
or查询
fruitModel.find({$or:[{"name":"柠檬"},{"name":"梨"}]}).then((data)=>{ console.log(data); console.log("or查询成功") },(err)=>{ console.log("or查询失败") })
-
limit()
限制显示条数fruitModel.find().limit(4).then((data)=>{ console.log(data); console.log("limit查询成功") },(err)=>{ console.log("limit查询失败") })
-
skip()
跳过几条fruitModel.find().skip(3).then((data)=>{ console.log(data); console.log("skip查询成功") },(err)=>{ console.log("skip查询失败") })
-
-
删除:
remove()
:不传入条件,删除全部-
条件删除
fruitModel.remove({"name":"苹果"}).then((data)=>{ console.log(data); console.log("remove成功") },(err)=>{ console.log("remove失败") })
-
删除全部
fruitModel.remove().then((data)=>{ console.log(data); console.log("remove成功") },(err)=>{ console.log("remove失败") })
-
-
-