Mongoose 的一切始于 Schema。每个 schema 都会映射到一个 MongoDB collection ,并定义这个collection里的文档的构成。
这句话是引用mongoose文档的,因为这句话很清楚的说明了mongoose,它的每一个 schema 就是相当于一个collection,我们需要对这个集合里面的文档进行操作,mongodb是对数据库操作,而mongoose是对象操作。
下面的一个例子是用mongoose操作关于图书的增删改查
1. 配置好路由准备工作
[JavaScript]
纯文本查看
复制代码
01 02 03 04 05 06 07 08 09 10 11 | 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: 关于数据的操作]
[JavaScript]
纯文本查看
复制代码
1 2 3 4 5 6 7 | 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
[JavaScript]
纯文本查看
复制代码
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 | <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
[JavaScript]
纯文本查看
复制代码
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 | 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 查询图书
[JavaScript]
纯文本查看
复制代码
1 2 3 4 5 6 7 8 9 | 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
[JavaScript]
纯文本查看
复制代码
1 2 3 4 5 6 | <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
[JavaScript]
纯文本查看
复制代码
01 02 03 04 05 06 07 08 09 10 11 12 | 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 // 首页编辑点击跳转到此页面
[JavaScript]
纯文本查看
复制代码
1 2 3 4 5 6 7 8 9 | <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
[JavaScript]
纯文本查看
复制代码
01 02 03 04 05 06 07 08 09 10 11 | 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. 删除图书
[JavaScript]
纯文本查看
复制代码
01 02 03 04 05 06 07 08 09 10 | 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('删除成功') })} |