封装 Koa操作Mongodb数据库的DB类库

//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/

原文地址:https://www.cnblogs.com/loaderman/p/11511963.html

时间: 2024-10-11 02:26:10

封装 Koa操作Mongodb数据库的DB类库的相关文章

Koa 操作 Mongodb 数据库

node-mongodb-native的介绍 使用基于官方的 node-mongodb-native 驱动,封装一个更小.更快.更灵活的 DB 模块, 让我们用 nodejs 操作 Mongodb 数据库更方便.更灵活. 官方文档:http://mongodb.github.io/node-mongodb-native/ node-mongodb-native的基本使用 安装mongodb npm install mongodb --save 引入mongodb下面的MongoClient va

node操作MongoDB数据库之插入

在上一篇中我们介绍了MongoDB的安装与配置,接下来的我们来看看在node中怎样操作MongoDB数据库. 在操作数据库之前,首先应该像关系型数据库一样建个数据库把... 启动数据库 利用命令提示符: 1.在创建数据库之前,我们应该启动数据库服务器 mongod --dbpath d:\MongoDB\data 注意:不要关闭这个数据库服务器...不然数据库就被关闭了 2.使用如下语句创建一个数据库 use mydb 这样mongodb会帮助我们自动创建他们,当然这个时候数据库还是空的. 3.

PHP操作MongoDB 数据库总结记录

分类: php mongo 2013-07-18 10:23 623人阅读 评论(0) 收藏 举报 目录(?)[-] 连接MongoDB数据库 选择数据库与表 插入数据记录 更新数据记录 删除记录操作 查询数据记录 关闭链接 常见函数使用 最近有个项目,需要用php操作mongoDb数据,所以了解下mongoDb为此整理了下,常见的操作...... 1,连接MongoDB数据库 [php] view plaincopy $conn = new Mongo(); 其他链接方式 //$conn=ne

不使用spring的情况下原生java代码两种方式操作mongodb数据库

由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置文件的密码,而实际上这个密码在代码中根本就没有使用,他们在代码中已经把用户验证信息写死.   在协助他们解决这个问题的时候,我看到他们代码中在和mongodb数据库交互时使用了已经不被建议使用的方法,于是便抽时间尝试了一下另一种被建议的方式实现各功能.   当然了,生产环境中用的是mongodb集群

PHP操作MongoDB数据库

一.MongoDB简介 MongoDB (名称来自"humongous") 是一个可扩展的.高性能.开源.模式自由.面向文档的数据库,集文档数据库.键值对存储和关系型数据库的优点于一身. 官方站点: https://www.mongodb.org MongoDB特点: ? 面向文档存储(类JSON数据模式简单而强大)? 动态查询? 全索引支持,扩展到内部对象和内嵌数组? 查询记录分析? 快速,就地更新? 高效存储二进制大对象 (比如照片和视频)? 复制和故障切换支持? Auto-Sha

PHP操作MongoDB 数据库

最近有个项目,需要用php操作mongoDb数据,整理如下 1,连接MongoDB数据库 $conn = new Mongo(); 其他链接方式 //$conn=new Mongo(); #连接本地主机,默认端口. //$conn=new Mongo(“172.21.15.69″); #连接远程主机 //$conn=new Mongo(“xiaocai.loc:10086″); #连接指定端口远程主机 //$conn=new Mongo(“xiaocai.loc”,array(“replicaS

不使用spring的情况下用java原生代码操作mongodb数据库的两种方式

由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置文件的密码,而实际上这个密码在代码中根本就没有使用,他们在代码中已经把用户验证信息写死.   在协助他们解决这个问题的时候,我看到他们代码中在和mongodb数据库交互时使用了已经不被建议使用的方法,于是便抽时间尝试了一下另一种被建议的方式实现各功能.   当然了,生产环境中用的是mongodb集群

8.3 操作MongoDB数据库

一项权威调查显示,在大数据时代软件开发人员必备的十项技能中MongoDB数据库名列第二,仅次于HTML5.MongoDB是一个基于分布式文件存储的文档数据库,可以说是非关系型(Not Only SQL,NoSQL)数据库中比较像关系型数据库的一个,具有免费.操作简单.面向文档存储.自动分片可扩展性强.查询功能强大等特点,对大数据处理支持较好,旨在为Web应用提供可扩展的高性能数据存储解决方案.MongoDB将数据存储为一个文档,数据结构由键值(key -> value)对组成.MongoDB文档

nodejs操作mongodb数据库的方法

//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.定义数据库连接的地址 以及配置数据库 qianfeng数据库的名称