天天看点

mongodb数据库的简单增删改查

用过node的小伙伴应该都会知道mongodb,下面的是最简单的增删改查操作。

1. app.js 
var express = require('express')
var app = express()
var db = require('./model/db.js')        // 数据库操作

// 访问路由对应操作
app.listen()复制代码                
2. module/db.js 

 这里封装了对数据库的基本操作

let MongoClient = require('mongodb').MongoClient;

// 封装内部函数 连接数据库
_connectDB = (callback) => {
    let url = 'mongodb://localhost:27017/Model';
    MongoClient.connect(url, (err,db) => {
        if(err) {
            callback(err,null)
            db.close()
            return;
        }
        callback(err,db)
    })
}复制代码                

封装新增数据函数

exports.insertOne = (collectionName, json, callback) => {
    // 连接数据库成功之后回调插入数据
    _connectDB((err,db) => {
        // 插入数据后回调参数  再传递回给形参
        db.collection(collectionName).insertOne(json, (err, result) => {
            callback(err, result)
            // 每次操作完毕记得关闭数据库
            db.close()
        })
    })
}
复制代码                

封装删除数据函数

exports.deleteMany = (collectionName,json,callback) => {
    _connectDB((err,db) => {
        // 选择集合 删除具体的一条数据
        db.collection(collectionName).deleteMany(
            json,
            (err,results) => {
                callback(err,result);
                db.close()
        })
    })
}复制代码
           

封装修改数据函数

exports.updateMany = (collectionName, json1, json2, callback) => {
    // 选择具体集合 json1: 要修改的旧数据  json2: 修改成什么样
    _connectDB((err,db) => {
        json1,
        json2,
        (err,result) => {
            callback(err, results)
            db.close()
        }
    })
}复制代码
           

最后的就查找数据函数

exports.find = (collectionName,json,C,D) => {
    // 列表名称 查找条件 分页查询  回调函数
    let result = []
    // 不传第三个参数的时候,默认查询全部 如果全部参数都传了,就按照条件查询
    if(arguments.length == ) {
        let callback = C
        let skipnumber = 
        let limit = 
    } else if(arguments.length == ){
        let callback = D
        let args = C
        // 忽略数量 = 每页显示多少条 * 当前页数
        let skipnumber = args.pageamount * args.page || 
        let limit = args.pageamount ||         // 数目限制显示多少条
        let sort = args.sort || {}        // 排序方式
    } else {
        throw new Error('find函数的参数个数,必须是三个或者四个')
        return;
    }

    _connectDB((err,db) => {
        // 创建新游标
        let cursor = db.collection(collactionName).find(json).skip(skipnumber).limit(limit).sort(sort);
        cursor.each((err,doc) => {
            if(err) {
                callback(err,null)
                db.close()
                return;
            }
            // 判断 doc 是否有效 无效的话就是遍历结束了 那就返回查询到的全部数据
            if(doc != null) {
                result.push(doc)
            } else {
                callback(null,result)
                db.close()
            }
        })
    })
}复制代码                
3. app.js

  完善逻辑

app.get("/", (req,res) => {
    // 每访问一次这个页面 就在 Model 数据库下的 student 集合下新增一条数据
    db.insertOne("student", {"name": "小白"}, (err, result) => {
        if(err) {
            consoel.log('插入失败')
            return;
        }
        res.send('插入数据成功')
    })
})

app.get("/read", (err, res) => {
      // 这个页面接收地址栏接收一个 page 参数
    let page = parseInt(req.query.page)
    // json为空默认查找全部
    db.find("student",{},{"pageamount": 3, "page": page},(err,result) => {
        res.send(result)
    })
})

app.get("/delete", (err, res) => {
    let _name = req.query.name
     // 根据接收到 name 删除对应的数据
    db.deleteMany("student", {"name": _name},(err, result) => {
        if(err) {
            console.log(err)
        }
        res.send(reult)
    })
})

app.get("/update", (req,res) => {
     // 三个参数 => 集合 要修改的  修改成
    db.updateMany(
        "student",
        {"name": "小白"},
        {$set: {name: "大白"}}
        (err,result) => {
            if(err) {
              console.log(res)
            }
           res.send(result);
     })
})
复制代码
           
4. 启动数据库   

比如我的数据库文件夹在Mondodb

5. 再新开一个cmd 对数据库进行查看
mongo.exe     // 进入mongodb环境
show dbs     // 查看全部数据库
use Model    // 使用Model数据库
show collections    // 查看Model数据库的全部集合
db.student.find()    // 查看student集合的数据,在访问页面后就会数据就会写入这个集合
复制代码
           

转载于:https://juejin.im/post/5c4fbebe518825260c5d22fa