mongoose的增删改查

栏目: 数据库 · 发布时间: 5年前

内容简介:Mongoose 的一切始于 Schema。每个 schema 都会映射到一个 MongoDB collection ,并定义这个collection里的文档的构成。这句话是引用mongoose文档的,因为这句话很清楚的说明了mongoose,它的每一个 schema 就是相当于一个collection,我们需要对这个集合里面的文档进行操作,mongodb是对数据库操作,而mongoose是对象操作。

Mongoose 的一切始于 Schema。每个 schema 都会映射到一个 MongoDB collection ,并定义这个collection里的文档的构成。

这句话是引用mongoose文档的,因为这句话很清楚的说明了mongoose,它的每一个 schema 就是相当于一个collection,我们需要对这个集合里面的文档进行操作,mongodb是对数据库操作,而mongoose是对象操作。

下面的一个例子是用mongoose操作关于图书的增删改查

1. 配置好路由准备工作

app.js

let express = require('express')
let app = express()
let router = require('./router/router.js')

app.set('view engine', 'ejs')
app.get('/', router.showIndex)
app.get('/AddBook', router.AddBook)
app.get('/edit', router.edit)
app.get('/doedit', router.doedit)
app.get('/delete', router.delete)
app.listen(3000)复制代码

models/db.js  [models: 关于数据的操作]

let moogoose = require('mongoose')
let db = mongoose.createConnection('mongodb://localhost:27017/Library')  // 连接数据库
db.once('open', (cb) => {
    console.log('数据库连接成功')
})

module.exports = db;复制代码

2. view/index.ejs  

<body>    
    <a href="/Addbook">[增加图书]</a>    
    <table>        
        <tr>            
            <td>图书名字</td>            
            <td>作者</td>            
            <td>价格</td>            
            <td>操作</td>        
        </tr>        
    <% for(var i = 0;i < book.length;i++){ %>            
        <tr>                
            <td><%=book[i].name%></td>                
            <td><%=book[i].author%></td>                
            <td><%=book[i].price%></td>                
            <td><a href="/edit?name=<%=book[i].name%>">修改</a></td>  
            <td><a href="/delete?id=<%=book[i].id%>">删除</a></td>  
        </tr>        
    <% } %>    
    </table>
</body>复制代码

models/Book.js

let mongoose = require("mongoose");let db = require("./db.js");
var bookSchema = new mongoose.Schema({ // Schema 结构 [表结构]    
    name    : {type : String},    
    author  : {type : String},    
    price   : {type : Number},
});

// 注册两个静态方法bookSchema.statics.Findbook = (callback) => {  // 找到所有图书    
    this.model("Book").find({}, callback);
}
bookSchema.statics.FindbookByName = (name,callback) => { // 根据name查找图书    
    this.model("Book").find({"name": name}, callback);
}
var bookModel = db.model('Book',bookSchema); // Book模型,基于schema创建
module.exports = bookModel复制代码

3. 查询图书 [router/router.js]

let Book = require('../models/Book.js')
// 首页查询 Book 中的全部图书渲染首页
exports.showIndex = (req, res, next) => {
    Book.Findbook((err,result) => {        
        res.render("index",{            
            "book" : result        
        })    
    })
}复制代码

4. 新增图书

Addbook.ejs        // 提交到doadd

<form action="/doadd" method="get">   
    <p>书名:<input type="text" name="name"></p>   
    <p>作者:<input type="text" name="author"></p>   
    <p>价格:<input type="text" name="price"></p>
    <p><input type="submit"></p>
</form>
复制代码

router/router.js

exports.Addbook = (req,res,next) => {
    res.render('AddBook')
}
// 每次新增一本图书就插入一条新数据
exports.doadd = (req,res,next) => {
    Book.create(req.query, (err) => {
        if(err) {
            res.send('保存失败')
        }
        res.send('保存成功')
    })
}复制代码

5. 编辑修改图书

edit.ejs      // 首页编辑点击跳转到此页面

<h1>修改</h1>
<table>    
    <form action="/doedit" method="get">        
        <p>书名:<input type="text" name="name" value="<%=name%>"></p>        
        <p>作者:<input type="text" name="author" value="<%=author%>"></p>        
        <p>价格:<input type="text" name="price" value="<%=price%>"></p>        
        <p><input type="submit"></p>    
    </form> 
</table>复制代码

router/router.js

exports.edit = (req,res,next) => {        // 查找到要修改的图书显示
    Book.FindbookByName(req.query.name,function(err,result){    res.render("edit",result[0]);  });}
// id是独一无二的 mongo分配的  根据id去修改图书的内容即可
export.doedit = (req,res,next) => {
    Book.update({id: req.query.id}, {name: req.query.name,author: req.query.author,price:req.query.price},(err,result)=>{
        if(err) {
            res.send(err)
        }
        res.send('修改成功')
    })
}
复制代码

6. 删除图书

let ObjectID = require('mongodb').ObjectID;   // 引入这个方法才可以获取到id并删除
exports.delete = (req,res,next) => {
    // id是mongo分配唯一的 所以保证不会删除到错误的
    Book.remove({"_id": ObjectID(req.query.id)}, (err,result) => {
        if(err) {
            alert(err)
        }
        res.send('删除成功')
    })
}复制代码

这样 mongoose 简单的增删改查通过一个图书案例就实现了。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网易一千零一夜

网易一千零一夜

网易杭研项目管理部 / 电子工业出版社 / 2016-9-1 / 46

本书是网易杭州研究院项目管理部多年来丰富的项目管理实践总结与干货分享。字字句句凝结了网易项目经理的甘与苦、汗与泪。 全书围绕项目管理体系,从敏捷实践、项目立项、需求管理、沟通管理,到计划进度管理、风险管理,真实反映了网易面向互联网产品项目管理实战经验与心路历程。 不论你是项目管理新手,还是资深项目经理,都可以从本书中获得启发与借鉴。一起来看看 《网易一千零一夜》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具