内容简介: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 简单的增删改查通过一个图书案例就实现了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- JDBC实现简单增删改查
- Golang操作MySQL增删改查
- iOS CoreData (一) 增删改查
- CMDB_基础模型(增删改查)
- Mybatis增删改查之Oracle
- golang中mysql增删改查实践
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机组成(第 6 版)
Andrew S. Tanenbaum、Todd Austin / 刘卫东、宋佳兴 / 机械工业出版社 / 2014-8-19 / CNY 99.00
本书采用结构化方法来介绍计算机系统,书的内容完全建立在“计算机是由层次结构组成的,每层完成规定的功能”这一概念之上。作者对本版进行了彻底的更新,以反映当今最重要的计算机技术以及计算机组成和体系结构方面的最新进展。书中详细讨论了数字逻辑层、微体系结构层、指令系统层、操作系统层和汇编语言层,并涵盖了并行体系结构的内容,而且每一章结尾都配有丰富的习题。本书适合作为计算机专业本科生计算机组成与结构课程的教......一起来看看 《计算机组成(第 6 版)》 这本书的介绍吧!