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