6------------Node进阶-Mongoose
- 6.1
------需求分析
6.1.1------为什么要用:1.之前我们都是通过命令行或者shell来完成对数据库的各种操作的,但在开发中大部分时候我们都需要通过程序来完成对数据库的操作
2.而Mongoose就是一个让我们可以通过Node来操作MongoDB的模块
6.1.2------mongoose是什么:1.http://mongoosejs.com/
2.Mongoose是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能
6.1.3------moogoose的优势:1.可以为文档创建一个模式结构
2.可以对模型中的对象/文档进行验证
3.数据可以通过类型转换为对象模型
4.可以使用中间件来应用业务逻辑
5.比Node原生的MongoDB驱动更容易
- 6.2
--------基本使用: 在一个文件夹中进入cmd命令输入以下:
1.初始化
npm init
2.下载express
npm install express --save
3.下载mongoose 注意:如下载失败,可能是你原先安装了淘宝镜像,使得下载的路径不是:https://registry.npmjs.org/ ,ze在cmd中先输入:npm config set registry https://registry.npmjs.org/ 再输入npm install mongoose --save 即可
npm install mongoose --save
6.2.1-------相关概念:1.mongoose中提供了几个新的对象
2.Schema(模式对象) Schema对象定义约束了数据库中的文档结构
3.Model Model对象作为集合中的所以文档的表示,相当MongoDB数据库中的集合collection
4.Document Document表示集合中的具体文档
6.2.2-------基本步骤:
//1.引用模块
let mongoose = require(“mongoose”);
// 连接数据库
mongoose.connect(‘mongodb://localhost/m_data’);
// 2.监听各种状态
let db = mongoose.connection;
db.on('error',()=>{
console.log("连接失败");
})
db.once('open',function () { //可使用箭头函数
console.log('连接成功');
});
db.once('close',function () { //可使用箭头函数
console.log("数据断开成功");
})
6.2.3-------使用例子:
//1.引用模块
let mongoose = require("mongoose");
// 连接数据库
mongoose.connect('mongodb://localhost/m_data');
mongoose.connection.once("open",()=>{
console.log('数据库连接成功');
});
mongoose.connection.once("close",()=>{
console.log('数据库连接失败');
});
// 2.创建Schema(模式对象)
let Schema = mongoose.Schema;
let personSchema = new Schema({
name:String,
age:Number,
sex:{
type:String,
default:"男"
},
chat:String
})
// 3.创建Model对象
let personModel = mongoose.model("person",personSchema)
// 4.插入文档
personModel.create({
name:"杨过",
age:18,
chat:"哈哈哈哈哈"
},(err)=>{
if(!err){
console.log("插入成功");
}else {
throw err;
}
})
// 插入多条
personModel.create({
name:"小龙女",
age:18,
sex:"女",
chat:"终于等到你,还好没放弃"
},(err)=>{
if(!err){
console.log("插入成功");
}else {
throw err;
}
})
运行结果:
6.2.4--------概述:使用步骤
1.下载安装mongoose npm i mongoose --save
2.在项目中引用mongoose let mongoose = require(“mongoose”);
3.连接MongoDB数据库 <1>mongoose.connect(‘mongodb://数据库的IP地址:端口号/数据库’)
<2>如果端口好是默认号(27017)则可以省略
4.监听MongoDB数据库的连接状态。 1.在mongoose对象中,有一个属性叫connection,该对象表示的就是数据库连接,通过监视该对象的状态,可以来监听数据库的连接和断开
2.mongoose.connection.once(“close”,()=>{console.log(‘数据库连接失败’);}); mongoose.connection.once(“open”,()=>{console.log(‘数据库连接成功’);});
**
- 6.3-
----mongoose对文档进行增删改查 官方地址:https://mongoose.kkfor.com/**
6.3.1----增加
//1.引用模块
let mongoose = require("mongoose");
// 连接数据库
mongoose.connect('mongodb://localhost/m_data');
mongoose.connection.once("open",()=>{
console.log('数据库连接成功');
});
mongoose.connection.once("close",()=>{
console.log('数据库连接失败');
});
// 2.创建Schema(模式对象)
let Schema = mongoose.Schema;
let personSchema = new Schema({
name:String,
age:Number,
sex:{
type:String,
default:"男"
},
chat:String
})
// 3.创建Model对象
let personModel = mongoose.model("person",personSchema)
// 4.增加
personModel.create([
{name:"张三",age:18,chat:'哈哈',sex:"女"},
{name:"李四",age:28,chat:'呵呵'},
{name:"王五",age:38,chat:'啊啊',sex:"女"},
{name:"哈哈",age:48,chat:'安安'},
{name:"呵呵",age:58,chat:'牛牛',sex:"女"},
],(err)=>{
if(!err){
console.log("增加成功");
}else {
throw err;
}
})
6.3.2------查找数据
// 查
personModel.find({},(err,docs)=>{ //docs是个数组类型
if(!err){
console.log(docs);
}
}) //异步操作
personModel.find({name:“张三”},(err,docs)=>{
if(!err){
console.log(docs);
}
})
// 查找所有name对应的列数,并隐藏id所对应的列 1是显示,0是隐藏
personModel.find({},{name:1,_id:0},{skip:5,limit:2},(err,docs)=>{ //{name:1,_id:0,sex:1}==》“name -_id sex” 一样 。skip 第5条开始 limit 显示2条
if(!err){
console.log(docs);
}
})
6.3.3----修改
personModel.update({name:“张三”},{$set:{age:89888}},{multi:true},(err)=>{ //增加{multi:true} 则修改多个,否则只会修改一个
if(!err){
console.log(“修改成功”);
}else {
throw err;
}
})
6.3.4----删除
Model.deleteMany() 删除多个
Model.deleteOne() 删除一个
personModel.remove({name:“张三”},(err)=>{ //删除所有对应的
if(!err){
console.log(“删除成功”);
}else {
throw err;
}
})
6.3.5----统计文档个数
personModel.count({},(err,count)=>{
if(!err){
console.log(“count”);
}else {
throw err;
}
})