mongoose的增删改查

栏目: 数据库 · 发布时间: 5年前

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

设计模式解析

设计模式解析

Alan Shalloway、James R.Trott / 徐言声 / 人民邮电出版社 / 2013-1 / 55.00元

《设计模式解析(第2版·修订版)》,本书首先概述了模式的基础知识,以及面向对象分析和设计在当代软件开发中的重要性,随后使用易懂的示例代码阐明了12个最常用的模式,使读者能够理解模式背后的基本原则和动机,理解为什么它们会这样运作。一起来看看 《设计模式解析》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码