目录
- 一、Node访问MongoDB数据库
- 1、Mongoose模块
- 2、Schema
- 3、Model
- 4、Entity
- 5、使用方法
- (1)安装模块
- (2)创建配置文件,完成与MongoDB的连接
- (3)创建Schema
- (4)由Schema创建Model
- (5)创建路由文件
- (6)增、删、改、查操作
一、Node访问MongoDB数据库
1、Mongoose模块
Mongoose模块 :是Node访问MongoDB数据库的封装。采用对象模式将数据库中的数据转换成JavaScript中的对象。
2、Schema
Schema : 它是一种以文件形式存储的数据库模型骨架(表结构)
3、Model
Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对
4、Entity
Entity : 由Model创建的实体,他的操作也会影响数据库
5、使用方法
(1)安装模块
npm install mongoose
(2)创建配置文件,完成与MongoDB的连接
mongocofig.js文件:
//导入mongoose模块
const mongoose = require('mongoose')
//定义连接mongoDB的字符串(连接地址)
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'+db_url)
})
//连接失败
mongoose.connection.on('error',function (err){
console.log('MongoDB Connection error:'+err)
})
//断开连接
mongoose.connection.on('disconnected',function(){
console.log('MongoDB disconnected ')
})
module.exports = mongoose
(3)创建Schema
(4)由Schema创建Model
ClassesSchema.js代码如下:
const mongoose = require('../mongoconfig')
const Schema = mongoose.Schema
//定义Schema
var ClassesSchema = new Schema({
name:{type:String},
age:{type:Number},
sex:{type:String},
hobby:{type:Array}
})
//由Schema生成Model,用Model操作数据库
module.exports = mongoose.model('Classes',ClassesSchema)
(5)创建路由文件
配置路由文件app.js:
var mongoRouter =require('./routes/mongo')
app.use('/mongo',mongoRouter)
(6)增、删、改、查操作
A、增加:使用Model的实例调用save方法(注意:只有增加使用Entity操作数据库)
Model:ClassesModel
Entity :clazz = new ClassesModel()
clazz.save()
const express = require('express')
const ClassesModel = require('../config/model/ClassesSchema')
const router =express.Router()
//http://localhost:3000/mongo/add
router.post('/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
})
}
})
})
测试结果:
B、删除:使用Model操作数据库
mongoose删除方法 | 说明 |
deleteOne | 删除一条记录,返回删除的数量 |
deleteMany | 删除多条记录,返回删除的数量 |
findOneAndDelete | 先查找后删除,若没有找到匹配的记录不执行删除,返回null |
findByIdAndDelete | ① 没有符合 id 的数据时,返回 null。 ② id 为空或 undefined 时,返回 null。③ 删除成功返回 {} 形式的原数据。 |
deleteOne:
const express = require('express')
const ClassesModel = require('../config/model/ClassesSchema')
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;
findOneAndDelete:
const express = require('express')
const ClassesModel = require('../config/model/ClassesSchema')
const router =express.Router()
//http://localhost:3000/mongo/remove
router.delete('/remove',(req, res) => {
ClassesModel.findOneAndDelete({'name':'张扬'},(err,result)=>{
if(err){
res.json({
code:1001,
msg:'删除失败'
})
}else{
res.json({
code:1002,
msg:'删除成功',
data:result
})
}
})
})
我们看一下mongdb数据库里面是否有张扬:
先查找后删除,若没有找到匹配的记录不执行删除,返回null:
C、更新:使用Model操作数据库
mongoose更新方法 | 说明 |
updateOne、updateMany | 返回更新的数量 |
findOneAndUpdate、findByIdAndUpdate | 查找后更新,若没有找到匹配的记录不执行删除,返回null |
D、查询:使用Model操作数据库
mongoose查询方法 | 说明 |
find() | 查询所有 |
findOne({}) | 按条件查询 |
findById() | 按id查询 |
路由文件mongo.js代码如下:
```javascript
const express = require('express')
const ClassesModel = require('../config/model/ClassesSchema')
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;
测试结果如下: