mongoose的增刪改查

Mongoose 的一切始於 Schema。每一個 schema 都會映射到一個 MongoDB collection ,並定義這個collection裏的文檔的構成。javascript

這句話是引用mongoose文檔的,由於這句話很清楚的說明了mongoose,它的每個 schema 就是至關於一個collection,咱們須要對這個集合裏面的文檔進行操做,mongodb是對數據庫操做,而mongoose是對象操做。java

下面的一個例子是用mongoose操做關於圖書的增刪改查mongodb

1. 配置好路由準備工做 數據庫

app.js express

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: 關於數據的操做]bash

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  app

<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.jsmongoose

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]ui

let Book = require('../models/Book.js')
// 首頁查詢 Book 中的所有圖書渲染首頁
exports.showIndex = (req, res, next) => {
    Book.Findbook((err,result) => {        
        res.render("index",{            
            "book" : result        
        })    
    })
}複製代碼

4. 新增圖書this

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 簡單的增刪改查經過一個圖書案例就實現了。

相關文章
相關標籤/搜索