• 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();//关闭数据库
                });
        });
    };
  • 相关阅读:
    WCF 第十章 异常处理 创建并使用强类型错误
    WCF 第十章 总结
    WCF 第十章 异常处理
    WCF 第十章 异常处理 使用FaultException管理服务异常
    WCF 第十章 异常处理 通信异常细节
    哪本书是对程序员最有影响、每个程序员都该阅读的书?(转自外刊IT评论)
    WCF 第十一章 工作流服务 从WF调用一个WCF服务
    比尔盖茨给大学毕业生的11条人生忠告
    王爽 汇编语言 实验七
    王爽 汇编语言 实验五第5题和第6题
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7895943.html
Copyright © 2020-2023  润新知