当前位置:网站首页>Mongoose module
Mongoose module
2022-07-30 17:00:00 【THER1881】
一、Mongoose
Mongoose是在node.js环境中对MongoDB数据库操作的封装,一种对象模型工具,可以将数据库中的数据转换为JavaScript对象供我们使用.
1、名词解释
Schema :
它是一种以文件形式存储的数据库模型骨架,不具备对数据库操作的能力,Only the database performance in fragments of a,Can be understood as a table structure.
Model :
由Schema发布生成的模型,具有抽象属性和行为的数据库操作对
Entity :
由Model创建的实体,他的操作也会影响数据库
2、Schema、Model、Entity的关系
Schema生成Model,Model创造Entity,Model和Entity都可对数据库操作造成影响,但Model比Entity更具操作性.
3、命名规范(建议)
var PersonSchema; //Person的文本属性
var PersonModel; //Person的数据库模型
var PersonEntity; //Person实体
4、实现增删改查
4.1、安装插件
npm install mongoose
4.2、引用:
var mongoose = require(‘mongoose’);
4.3、创建mongoconfig.js用于连接MongoDB数据库
// 导入mongoose模块
const mongoose = require('mongoose')
//定义连接mogondb的字符串(链接地址)
const db_url= 'mongodb://localhost:27017/mvc'
//连接
mongoose.connect(db_url,{
useNewUrlParser:true,useUnifiedTopology:true})
//连接成功
mongoose.connection.on('connected',function (){
console.log('MongoDB Connection open to'+db_url)
})
//连接异常
mongoose.connection.on('error',function (err){
console.log('MongoDB Connection Eroor:'+err)
})
//断开连接
mongoose.connection.on('disconnected',function (){
console.log('MongoDB disconnectied')
})
module.exports=mongoose
4.4、创建Shema(classes.js)
var mongoose = require('../mogoconfig')
var Schema = mongoose.Schema
//定义schema
var ClassesSchema = new Schema({
name:{
type:String},
age:{
type:Number},
sex:{
type:String},
hobby:{
type:Array}
});
//由Schema生成model,modelHas the ability to the operation of the database
module.exports = mongoose.model('Classes',ClassesSchema)
4.5、创建路由文件
4.6、增删改查
(1)、增加:使用Model的实例调用save方法(使用Entity操作数据库)
var express = require('express')
const ClassesModel = require('../config/model/classes')
const router = express.Router()
//http://localhost:3000/mongo/add
router.get('/add',(req, res) => {
let clazz = new ClassesModel({
name:'郭芙',
age:22,
sex:'女',
hobby:['武术','绘画']
})
clazz.save(function (err,result){
if(err){
res.json({
code:1001,
msg:'插入数据失败'
})
}else{
res.json({
code:1002,
msg:'插入数据成功',
data:result
})
}
})
})
module.exports = router

(2)、删除:使用Model操作数据库
a、deleteOne:删除一条记录,返回删除的数量
b、deleteMany:删除多条记录,返回删除的数量
c、findOneAndDelete:先查找后删除,若没有找到匹配的记录不执行删除,返回null
d、findByIdAndDelete
var express = require('express')
const ClassesModel = require('../config/model/classes')
const router = express.Router()
//http://localhost:3000/mongo/remove
router.delete('/remove',(req, res) => {
ClassesModel.deleteOne({
'name':'小红'},(err,result)=>{
if(err){
res.json({
code:1001,
msg:'删除失败'
})
}else{
res.json({
code:1002,
msg:'删除成功',
data:result
})
}
})
})
module.exports = router

删除后"小红"后的数据库:
(3)、更新:使用Model操作数据库
a、updateOne、updateMany:返回更新的数量
b、findOneAndUpdate、findByIdAndUpdate:先查找后更新,若没有找到匹配的记录不执行删除,返回null
var express = require('express')
const ClassesModel = require('../config/model/classes')
const router = express.Router()
//http://localhost:3000/mongo/modify
router.put('/modify',(req, res) => {
ClassesModel.updateOne({
'name':'小王'},{
'name':'王五','age':'28'},(err,result)=>{
if(err){
res.json({
code:1001,
msg:'更新失败'
})
}else{
res.json({
code:1002,
msg:'更新成功',
data:result
})
}
})
})
module.exports = router

更新后数据:
(4)、查询:使用Model操作数据库
a、find():查询所有
b、findOne({}):按条件查询
c、findById():按id查询
var express = require('express')
const ClassesModel = require('../config/model/classes')
const router = express.Router()
//http://localhost:3000/mongo/findAll
router.get('/findAll',(req, res) => {
ClassesModel.find(function(err,result){
if(err){
console.log(err)
res.send({
code:1001,
msg:'查询失败'
})
}else{
res.send({
code:1002,
msg:'查询成功',
data:result
})
}
})
})
module.exports = router

边栏推荐
猜你喜欢
随机推荐
FP6606ACAW4 TQFN-20L (3mmx3mm) USB双端口充电控制器 百盛电子代理
Daily practice------Generate 13-digit bar, Ean-13 code rule: The thirteenth digit is the check code obtained by the calculation of the first twelve digits.
真正懂经营管理的CIO具备哪些特质
Weka 3.8.6安装与Weka 3.8.6功能介绍
[HarekazeCTF2019]Avatar Uploader 1
[NCTF2019]Fake XML cookbook-1|XXE漏洞|XXE信息介绍
打印1-100之间的奇数
Dive deep on Netflix‘s recommender system(Netflix推荐系统是如何实现的?)
优酷视频元素内容召回系统:多级多模态引擎探索
04、Activity的基本使用
Explore CSAPP Experiment 2-bomb lab-Section 1
Various meanings of SQL's PARTITION BY syntax (with examples)
万华化学精细化工创新产品大会
The way of life, share with you!
2022-07-30 Androd 进入深度休眠后把WIFI给关掉,唤醒之后重新打开WIFI
深度学习区分不同种类的图片
【SOC FPGA】Peripheral KEY LED
Mirror stand to collect
基于STM32F407使用ADC采集电压实验
Mysql进阶优化篇01——四万字详解数据库性能分析工具(深入、全面、详细,收藏备用)










