Node对MongoDB实现增删改查,分页功能

对上上一篇的内容的增加:

Node.js环境下对MongoDB实现查,插,分页功能

本来那时候就写好了,但是那时候有个Bug,不知道哪里的问题,昨天才发现updateMany函数传实参的时候把collectionName打了引号,煞笔了一天。诶=-=

//limit,skip高效率做法
var express = require("express");
var app = express();
var db = require("./model/db3.js");

app.get("/",function (req,res) {
    db.insertOne("teacher",{"name":"小红"},function (err,result) {
        if(err) {
            console.log("插入失败");
        }
        res.send("插入成功");
    });
});

app.get("/du",function (req, res) {
    //这个页面现在接受一个page参数。
    var page = parseInt(req.query.page); //express中读取get参数很简单
    //查找4个参数,在哪个集合查,查什么,分页设置,查完之后做什么
    //每页10个,查第三页
    // db.find("student",{},{"pageamount":5,"page":page},function (err,result) {
    // db.find("student",{},function (err,result) {

    //注意这个结果还是5条,是先find在age大于50情况的结果集里面skip和limit
        db.find("student",{"age":{$gt:50}},{"pageamount":5,"page":page},function (err,result) {
        if(err) {
            console.log(err);
        }
        res.send(result);
    });
});

app.get("/shan",function (req,res) {
    //注意这里是是字符串
    var restaurant_id = req.query.id;
    db.deleteMany("teacher",{"name":"小红"},function (err,result) {
        if(err) {
            console.log(err);
        }
        res.send(result);
    });
});

app.get("/xiugai",function (req,res) {
    //注意这里是是字符串
    db.updateMany(
        "student",
        {
            name:"哈哈"
        },
        {
            $set: {name : "嘻嘻"}

        },
        function (err,result) {
        if(err) {
            console.log(err);
            db.close();//关闭数据库
        }
        res.send(result);
    });
});

app.listen(3000);
//优化后,加入skip,limit参数的写法
//这个模块里面封装了所有对数据库的常用操作
var settings = require("../settings.js");
var MongoClient = require('mongodb').MongoClient;

//不管数据库什么操作,都是先连接数据库,所以我们可以把连接数据库
//封装成为函数

function _connectDB(callback) {
    var url = settings.dburl;
    MongoClient.connect(url, function (err,db) {
        if(err) {
            callback(err,null);
            return;
        }
        callback(err,db);
    });
}

exports.insertOne = function (collectionName, json, callback) {
    _connectDB(function (err,db) {
            if(err) {
                callback(err,null);
                return;
            }
            db.collection(collectionName).insertOne(json, function (err, result) {
                callback(err, result);
                db.close();//关闭数据库
            })
        });
}

exports.find = function (collectionName,json,C,D) {
    var result = [];   //结果数组
    //JS没有函数重载,只能手动实现
    if(arguments.length == 3) {
       //如果没有传args
        //那么参数C就是callback,参数D没有传。
        var callback = C;
        var skipnumber = 0;
        //数目限制,limit(0)就是没有限制
        var limit = 0;
    }else if(arguments.length == 4) {
        var args = C;
        var callback = D;
        //应该省略的条数
        var skipnumber = args.pageamount * args.page;
        //数目限制
        var limit = args.pageamount;
    }else {
        throw new Error("find函数的参数个数,必须是3个,或者4个");
        return;
    }
    //从第零页开始
    console.log("略过了"+skipnumber+"条"+"限制在"+limit+"条");
    //链接数据库,链接之后查找所有
    _connectDB(function (err,db) {
        var cursor = db.collection(collectionName).find(json).skip(skipnumber).limit(limit);
        cursor.each(function (err, doc) {
            if(err) {
                callback(err,null);
                db.close();
                return;
            }
           if(doc != null) {
               result.push(doc); //放入结果数组
           }else {
               //遍历结束,没有更多的文档
                callback(null,result);
               db.close();//关闭数据库
           }
        });
    });
}

exports.deleteMany = function (collectionName,json,callback) {
    _connectDB(function (err, db) {
        //删除
        db.collection(collectionName).deleteMany(
            json,
            function (err, results) {
                callback(err, results);
                db.close();
            }
        );
    });
}

exports.updateMany = function (collectionName,json1,json2,callback) {
    _connectDB(function (err,db) {
        db.collection(collectionName).updateMany(
            json1,
            json2,
            function(err,results) {
                callback(err,results);
                db.close();//关闭数据库
            });
    });
};

 

posted @ 2017-11-25 17:56  Lawliet__zmz  阅读(321)  评论(0编辑  收藏  举报