mongoose的增删改查

2,837 阅读3分钟

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 简单的增删改查通过一个图书案例就实现了。