//http://mongodb.github.io/node-mongodb-native/3.0/quick-start/quick-start/ /* nodejs操作mongodb数据库 1.安装mongodb、 cnpm install mongodb --save 2.引入mongodb下面的MongoClient var MongoClient = require('mongodb').MongoClient; 3.定义数据库连接的地址 以及配置数据库 koa数据库的名称 var url = 'mongodb://localhost:27017/'; var dbName = 'koa' 4.nodejs连接数据库 MongoClient.connect(url,function(err,client){ const db = client.db(dbName); 数据库db对象 }) 5.操作数据库 db.user.insert MongoClient.connect(url,function(err,db){ db.collection('user').insertOne({"name":"张三"},function(err,result){ db.close() //关闭连接 }) }) */ var MongoClient = require('mongodb').MongoClient; var dbUrl = 'mongodb://localhost:27017/'; var dbName = 'koa' //连接数据库 //console.time('start'); //MongoClient.connect(dbUrl,(err,client)=>{ // if(err){ // // console.log(err); // return; // } // // var db=client.db(dbName); // console.timeEnd('start'); // //增加数据 // // db.collection('user').insertOne({'username':"wangwu",'age':26,'sex':"男","status":"1"},function(err,result){ // // if(!err){ // //console.log('增加数据成功'); // client.close(); // // } // }) // //}) console.time('start1'); MongoClient.connect(dbUrl,(err,client)=>{ if(err){ console.log(err); return; } var db=client.db(dbName); //查询数据 var result=db.collection('user').find({}); result.toArray((err,docs)=>{ console.timeEnd('start1'); console.log(docs); }) }) console.time('start2'); MongoClient.connect(dbUrl,(err,client)=>{ if(err){ console.log(err); return; } var db=client.db(dbName); //查询数据 var result=db.collection('user').find({}); result.toArray((err,docs)=>{ console.timeEnd('start2'); console.log(docs); }) })
var Koa=require('koa'), router = require('koa-router')(), render = require('koa-art-template'), path=require('path'), DB=require('./module/db.js'); var app=new Koa(); //配置 koa-art-template模板引擎 render(app, { root: path.join(__dirname, 'views'), // 视图的位置 extname: '.html', // 后缀名 debug: process.env.NODE_ENV !== 'production' //是否开启调试模式 }); router.get('/',async (ctx)=>{ console.time('start'); var result=await DB.find('user',{}); console.timeEnd('start'); console.log(result); await ctx.render('index',{ list:{ name:'张三' } }); }) router.get('/news',async (ctx)=>{ console.time('start'); var result=await DB.find('user',{}); console.timeEnd('start'); ctx.body="这是一个新闻页面"; }) app.use(router.routes()); /*启动路由*/ app.use(router.allowedMethods()); app.listen(3000);
DB.js
//DB库 var MongoClient = require('mongodb').MongoClient; var Config=require('./config.js'); class Db{ static getInstance(){ /*1、单例 多次实例化实例不共享的问题*/ if(!Db.instance){ Db.instance=new Db(); } return Db.instance; } constructor(){ this.dbClient=''; /*属性 放db对象*/ this.connect(); /*实例化的时候就连接数据库*/ } connect(){ /*连接数据库*/ let _that=this; return new Promise((resolve,reject)=>{ if(!_that.dbClient){ /*1、解决数据库多次连接的问题*/ MongoClient.connect(Config.dbUrl,(err,client)=>{ if(err){ reject(err) }else{ _that.dbClient=client.db(Config.dbName); resolve(_that.dbClient) } }) }else{ resolve(_that.dbClient); } }) } find(collectionName,json){ return new Promise((resolve,reject)=>{ this.connect().then((db)=>{ var result=db.collection(collectionName).find(json); result.toArray(function(err,docs){ if(err){ reject(err); return; } resolve(docs); }) }) }) } update(){ } insert(){ } } module.exports=Db.getInstance();
config.js
/*配置文件*/ var app={ dbUrl: 'mongodb://localhost:27017/', dbName: 'koa' } module.exports=app;
数据库的备份
//DB库 var MongoClient = require('mongodb').MongoClient; var Config=require('./config.js'); class Db{ static getInstance(){ /*1、单例 多次实例化实例不共享的问题*/ if(!Db.instance){ Db.instance=new Db(); } return Db.instance; } constructor(){ this.dbClient=''; /*属性 放db对象*/ //this.connect(); } connect(){ /*连接数据库*/ let _that=this; return new Promise((resolve,reject)=>{ if(!_that.dbClient){ /*1、解决数据库多次连接的问题*/ MongoClient.connect(Config.dbUrl,(err,client)=>{ if(err){ reject(err) }else{ _that.dbClient=client.db(Config.dbName); resolve(_that.dbClient) } }) }else{ resolve(_that.dbClient); } }) } find(collectionName,json){ return new Promise((resolve,reject)=>{ this.connect().then((db)=>{ var result=db.collection(collectionName).find(json); result.toArray(function(err,docs){ if(err){ reject(err); return; } resolve(docs); }) }) }) } update(){ } insert(){ } } var myDb=Db.getInstance(); setTimeout(function(){ console.time('start'); myDb.find('user',{}).then(function(data){ //console.log(data); console.timeEnd('start'); }) },100) setTimeout(function(){ console.time('start1'); myDb.find('user',{}).then(function(data){ //console.log(data); console.timeEnd('start1'); }) },3000) var myDb2=Db.getInstance(); setTimeout(function(){ console.time('start3'); myDb2.find('user',{}).then(function(data){ //console.log(data); console.timeEnd('start3'); }) },5000) setTimeout(function(){ console.time('start4'); myDb2.find('user',{}).then(function(data){ //console.log(data); console.timeEnd('start4'); }) },7000)
demo:
var Koa=require('koa'), router = require('koa-router')(), render = require('koa-art-template'), path=require('path'), bodyParser=require('koa-bodyparser'), DB=require('./module/db.js'); var app=new Koa(); //配置post提交数据的中间件 app.use(bodyParser()); //配置 koa-art-template模板引擎 render(app, { root: path.join(__dirname, 'views'), // 视图的位置 extname: '.html', // 后缀名 debug: process.env.NODE_ENV !== 'production' //是否开启调试模式 }); //显示学员信息 router.get('/',async (ctx)=>{ var result=await DB.find('user',{}); console.log(result); await ctx.render('index',{ list:result }); }) //增加学员 router.get('/add',async (ctx)=>{ await ctx.render('add'); }) //执行增加学员的操作 router.post('/doAdd',async (ctx)=>{ //获取表单提交的数据 // console.log(ctx.request.body); //{ username: '王麻子', age: '12', sex: '1' } let data=await DB.insert('user',ctx.request.body); //console.log(data); try{ if(data.result.ok){ ctx.redirect('/') } }catch(err){ console.log(err); return; ctx.redirect('/add'); } }) //编辑学员 router.get('/edit',async (ctx)=>{ //通过get传过来的id来获取用户信息 let id=ctx.query.id; let data=await DB.find('user',{"_id":DB.getObjectId(id)}); //获取用户信息 await ctx.render('edit',{ list:data[0] }); }) router.post('/doEdit',async (ctx)=>{ //通过get传过来的id来获取用户信息 //console.log(ctx.request.body); var id=ctx.request.body.id; var username=ctx.request.body.username; var age=ctx.request.body.age; var sex=ctx.request.body.sex; let data=await DB.update('user',{"_id":DB.getObjectId(id)},{ username,age,sex }) try{ if(data.result.ok){ ctx.redirect('/') } }catch(err){ console.log(err); return; ctx.redirect('/'); } }) //删除学员 router.get('/delete',async (ctx)=>{ let id=ctx.query.id; var data=await DB.remove('user',{"_id":DB.getObjectId(id)}); console.log(data); if(data){ ctx.redirect('/') } }) app.use(router.routes()); /*启动路由*/ app.use(router.allowedMethods()); app.listen(3000);
var Koa=require('koa'), router = require('koa-router')(), render = require('koa-art-template'), path=require('path'), bodyParser=require('koa-bodyparser'), DB=require('./module/db.js'); var app=new Koa(); //配置post提交数据的中间件 app.use(bodyParser()); //配置 koa-art-template模板引擎 render(app, { root: path.join(__dirname, 'views'), // 视图的位置 extname: '.html', // 后缀名 debug: process.env.NODE_ENV !== 'production' //是否开启调试模式 }); //显示学员信息 router.get('/',async (ctx)=>{ var result=await DB.find('user',{}); console.log(result); await ctx.render('index',{ list:result }); }) //增加学员 router.get('/add',async (ctx)=>{ await ctx.render('add'); }) //执行增加学员的操作 router.post('/doAdd',async (ctx)=>{ //获取表单提交的数据 // console.log(ctx.request.body); //{ username: '王麻子', age: '12', sex: '1' } let data=await DB.insert('user',ctx.request.body); //console.log(data); try{ if(data.result.ok){ ctx.redirect('/') } }catch(err){ console.log(err); return; ctx.redirect('/add'); } }) //编辑学员 router.get('/edit',async (ctx)=>{ //通过get传过来的id来获取用户信息 let id=ctx.query.id; let data=await DB.find('user',{"_id":DB.getObjectId(id)}); //获取用户信息 await ctx.render('edit',{ list:data[0] }); }) router.post('/doEdit',async (ctx)=>{ //通过get传过来的id来获取用户信息 //console.log(ctx.request.body); var id=ctx.request.body.id; var username=ctx.request.body.username; var age=ctx.request.body.age; var sex=ctx.request.body.sex; let data=await DB.update('user',{"_id":DB.getObjectId(id)},{ username,age,sex }) try{ if(data.result.ok){ ctx.redirect('/') } }catch(err){ console.log(err); return; ctx.redirect('/'); } }) //删除学员 router.get('/delete',async (ctx)=>{ let id=ctx.query.id; var data=await DB.remove('user',{"_id":DB.getObjectId(id)}); console.log(data); if(data){ ctx.redirect('/') } }) app.use(router.routes()); /*启动路由*/ app.use(router.allowedMethods()); app.listen(3000);
Koa 操作 Mongodb 数据库
官方文档:http://mongodb.github.io/node-mongodb-native/