Node.js环境下对MongoDB实现查,插,分页功能
来源:互联网 发布:app的运营数据分析 编辑:程序博客网 时间:2024/06/03 20:36
写法上还是模块化,尽量把不同职责的代码分开,避免"万能类",尽量采用MVC。
连接,创建数据库,插入数据
db.js:
//这个模块里面封装了所有对数据库的常用操作var MongoClient = require('mongodb').MongoClient;//不管数据库什么操作,都是先连接数据库,所以我们可以把连接数据库//封装成为函数function _connectDB(callback) { var url = "MongoDB://127.0.0.1/haha"; 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,callback) { var result = []; //结果数组 if(arguments.length != 3) { callback("find函数接受三个参数",null); return ; } //链接数据库,链接之后查找所有 _connectDB(function (err,db) { var cursor = db.collection(collectionName).find(json); cursor.each(function (err, doc) { if(err) { callback(err,null); return; } if(doc != null) { result.push(doc); //放入结果数组 }else { //遍历结束,没有更多的文档 callback(null,result); } }); });}
01.js:
var express = require("express");var app = express();var MongoClient = require('mongodb').MongoClient;app.get("/",function (req,res) { //url就是数据库地址,/表示数据库 //假如数据库不存在,没有关系,程序会帮你自动创建一个数据库 var url = "mongodb://localhost:27017/haha"; //连接数据库 MongoClient.connect(url, function(err, db) { //回调函数表示链接成功做的事情,db参数就是连接上的数据库实体 if(err) { console.log("数据库连接失败"); return ; } console.log("连接数据库成功"); //插入数据,集合如果不存在,也没有关系,程序会帮你创建 db.collection("student").insertOne({ "name" : "哈哈", "age" : parseInt(Math.random()*100 + 10) }, function(err, result) { if(err) { console.log("插入失败"); return ; } console.log("插入成功"); console.log(result); res.send(result); db.close(); }); db.close(); });});app.listen(3000);
1版本分页
在db.js这种版本的分页效率是比较低的,因为已经查询了所有数据库,然后筛选需要push进数组。
02.js:
var express = require("express");var app = express();var db = require("./model/db.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参数很简单 var a = []; db.find("student",{},function (err,result) { //这是一种分页查询的笨方法,效率低,因为已经查询了所有数据库,然后再回调里面筛选 for(var i = 10 * page; i < 10*(page + 1); i++ ) { a.push(result[i]); } res.send(a); });});app.listen(3000);
2版本分页
利用mongodb自带的函数limit()和skip(),重写db2.js,实现分页,但是这两个函数底层是怎么实现的呢,据说效率蛮高,底层实现这里暂时先不探究,日后专门开一篇来探讨。
//优化后,加入skip,limit参数的写法//这个模块里面封装了所有对数据库的常用操作var MongoClient = require('mongodb').MongoClient;//不管数据库什么操作,都是先连接数据库,所以我们可以把连接数据库//封装成为函数function _connectDB(callback) { var url = "MongoDB://127.0.0.1/haha"; 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); return; } if(doc != null) { result.push(doc); //放入结果数组 }else { //遍历结束,没有更多的文档 callback(null,result); } }); });}
03.js:
//limit,skip高效率做法var express = require("express");var app = express();var db = require("./model/db2.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参数很简单 //每页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.listen(3000);
因为原生js没有函数重载,注意这里还手动对函数根据参数个数不同进行了重载,尽量让程序健壮。注释很详细了。
阅读全文
0 0
- Node.js环境下对MongoDB实现查,插,分页功能
- Node对MongoDB实现增删改查,分页功能
- node.js操作mongodb数据库(增删查改分页)
- node.js对mongodb的增删查改
- node.js mongodb分页查询
- Node.js+Express+MongoDB实现简单登录注册功能
- node.js-mongodb封装分页查找
- node.js对mongodb的连接&增删改查(附async同步流程控制)
- node.js下如何利用jqpaginator插件实现ajax分页
- js实现分页功能
- node.js对mongodb的一些操作
- Ubuntu + Node.js + Mongodb开发环境搭建
- node.js实现replaceall功能
- Node+Express+MongoDB实现登录注册功能
- centos下安装node环境,Express,Mongodb
- Mac下安装node.js和mongoDB
- Node.js+websocket+mongodb实现即…
- Node.js+Express+Mongodb 实现学校论坛
- ViewPager学习
- MongoDB第一课,shell命令下的增删改查
- SSH整合
- Android学习 ——SystemUIService之StorageNotification分析
- 整数求和
- Node.js环境下对MongoDB实现查,插,分页功能
- 习题6.7
- 配置Canvas为全屏时,无滚动条
- android string.xml里空格表示
- 常用的转义字符表
- M
- android okhttp3框架使用
- pc端和手机端禁用滚动条
- linux获取目录下文件 包含子目录