Node对MongoDB实现增删改查,分页功能
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node对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();//关闭数据库 }); }); };
以上是关于Node对MongoDB实现增删改查,分页功能的主要内容,如果未能解决你的问题,请参考以下文章
node.js对mongodb的连接&增删改查(附async同步流程控制)