一、Mongoose

Mongoose是在node.js环境中对MongoDB数据库操作的封装,一种对象模型工具,可以将数据库中的数据转换为JavaScript对象供我们使用。

1、名词解释

Schema :
它是一种以文件形式存储的数据库模型骨架,不具备对数据库操作的能力,仅仅只是数据库在程序片段中的一种表现,可以理解为表结构。

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//定义schemavar  ClassesSchema = new Schema({name:{type:String},age:{type:Number},sex:{type:String},hobby:{type:Array}
});//由Schema生成model,model具有对数据库的操作能力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/removerouter.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

Mongoose模块相关推荐

  1. nodeJs利用mongoose模块操作数据

    1. 下载安装好MongoDB,在根磁盘下(例,d盘)新建文件夹data,然后在里面新建db文件夹,在mongodb安装目录的bin文件夹下运行命令mongod --dbpath d:\data\db ...

  2. 使用mongoose模块向本地mongodb数据库中插入数据报错“Operation `people.insertOne()` buffering timed out after 10000ms“

    异常 连接本地的mongodb数据库报错: MongooseError: Operation `people.insertOne()` buffering timed out after 10000m ...

  3. mongoose 实用 API 总结

    2019独角兽企业重金招聘Python工程师标准>>> 一.介绍 1. 概述 mongoose 模块用于简化 node 与数据库 mongodb 之间的操作,目的是通过简便的 API ...

  4. Nodejs+Express学习二(Mongoose基础了解)

    学习Node注定少不了与数据库打交道,而MongoDB和Node可以说是绝配,这篇主要是简单介绍Mongoose这个模块. 由于本人也是边学边写的这篇文章,绝对会有新手的味道,请大神看到这里就表往下看 ...

  5. Mongo基础使用,以及在Express项目中使用Mongoose

    MongoDB的基本使用 MongoDB特点: 使用BSON存储数据 支持相对丰富的查询操作(相对其他nosql数据库) 支持索引 副本集(支持多个实例/多个服务器运行同个数据库) 分片(数据库水平扩 ...

  6. 基于Express+mongoose搭建的学生管理系统(2017-08-07)

    上一周学了下mongoose,虽然学了点皮毛,但还是想写写总结总结,这也是我的第一篇技术博客.还是蛮开心的,happy~~来,切入正题!项目源码我会放在github上. github 地址 代码目录 ...

  7. 应用Mongoose开发MongoDB(2)模型(models)

    数据模型及基础操作模板 为了使工程结构清晰,将数据模型(Schema, Model)的建立与增删查改的基础操作模板写在一起,命名为数据库设计中的Collection(对应于关系型数据库中的表定义)名, ...

  8. 【node】------mongoose的基本使用------【巷子】

    1.安装mongoose npm install mongoose 2.启动数据库 mongod --dbpath d:\data\db 3.引入mongoose模块并连接数据库 const mong ...

  9. mongoose Topology was destroyed 处理

    在用 node 的 mongoose 模块操作 mongodb 数据库的时候,本来正常返回数据,但是有时候会返回空白页,控制台里报错: Topology was destroyed 数据库连接代码如下 ...

最新文章

  1. python实现数据库查询_通过Python实现mysql查询数据库实例
  2. 5月3日 条件语句、循环语句的复习练习
  3. mysql的源码目录_Mysql DBA系统学习(2)了解mysql的源码目录及源文件
  4. 如何用10万资金炒房到1000万
  5. mongo快速翻页方法(转载)
  6. CI(持续集成)/CD(持续部署)
  7. ABBYY FineReader 12扫描对页的步骤有哪些
  8. 动态创建 Lambda 表达式
  9. 英文期刊论文翻译格式要求和文献要求
  10. MATLAB画圆时却显示椭圆?一个命令解决问题!
  11. XMPP tigase 8.0 与 strophe.js 测试Web聊天服务/即时通信
  12. Permute 3.6.5 小巧便捷的多媒体文件格式转换器
  13. unity 给图片边缘_Unity 截图选择框,中间全透明,边缘半透明
  14. HDMI中的视频时序分析
  15. 软考嵌入式系统设计师2012年上午试题总结
  16. calibre +obok插件,解决从kobo上买的电子书的DRM问题
  17. linux 帝国cms 刷新,帝国cms怎么自动刷新网站首页?(帝国CMS自动刷新首页的方法)...
  18. 很「佛系」的商用本 — ThinkPad S2 2020 长测
  19. 【放苹果】m个苹果放到n个盘子中
  20. 【脚本】自动统计B站up主投稿视频时长

热门文章

  1. 小米小爱,ESP8266,点灯,WOL唤醒电脑
  2. Codeforces Round #742 (Div. 2)
  3. Edge浏览器 2020船新版本 比chrome好用太多的原因 前端必选浏览器之一 换它换它换它
  4. 中国印刷业目前发展的四大主要特点
  5. 1966. 卡片游戏
  6. Atlassian:一家没有销售团队,不靠融资做到百亿美元市值的技术公司
  7. 【kvm】更改内存大小
  8. js中对象不支持此属性或方法
  9. (五)RabbitMQ管理
  10. Persistence,EntityManagerFactory和EntityManager