夫天地者,万物之逆旅;光阴者,百代之过客。而浮生若梦,为欢几何?
Node.js操作MongoDB数据库的基本用法

准备工作

在使用MongoDB数据库之前,首先要保证电脑里已经安装MongoDB的服务,同时为了后续方便的使用MongoDB,建议安装可视化的工具,如MongoDB Compass Community(下载最新的mongodb 安装完成后会自动安装mongodb 可视化工具)、Robo 3T等,笔者使用的是Robo 3T,具体可以看下图,这里不作介绍。本文主要介绍Node.js下如何使用MongoDB。

安装及使用

执行安装命令:

npm install mongodb --save / cnpm install mongodb --save

具体使用的演示代码:

const MongoClient = require('mongodb').MongoClient;//引入MongoDB下面的MongoClient
const dbCollection = 'mongodb://localhost:27017/';//定义数据库连接的地址
const dbName = 'Blog';//连接具体的数据库名
//Nodejs连接数据库
MongoClient.connect(dbCollection,(err,client)=>{
    if(err){
        console.log(err);
        return;
    }
    var db = client.db(dbName);//数据库db对象
    var result = db.collection('category').find({});//查询
    result.toArray((err,doc)=>{
        console.log(doc);
    })
})

执行结果部分如下图

封装DbHelper类库

上面的示例代码中执行的是查询的操作,若还需要增加、删除和修改等操作时,我们仍需要再写一遍MongoClient.connect,也就是每执行一次操作,就需要connect 和 close 数据库,频繁的打开、关闭势必造成数据库性能的损耗。因此我们需要封装一个数据库访问的公共类库,并达到只实例化一次的目的。下面将使用单例模式来实现这个功能。

配置文件 config.js

var app={
    dbUrl: 'mongodb://localhost:27017/',
    dbName: 'Blog'
}
module.exports=app;

DbHelper.js(查询方法部分)

var MongoDB=require('mongodb');
var MongoClient =MongoDB.MongoClient;
const ObjectID = MongoDB.ObjectID;//MongoDB中_id是ObjectId类型,在查询时需要将字符串的_id转成ObjectId对象
var Config=require('./config.js');
class DbHelper{
    static getInstance(){   //单例,实现实例化一次 实例共享
        if(!DbHelper.instance){
            DbHelper.instance=new DbHelper();
        }
        return  DbHelper.instance;
    }
    constructor(){//构造函数中实现化数据库连接
        this.dbClient=''; //db对象
        this.connect(); //实例化的时候就连接数据库
    }
    connect(){  //连接数据库
      let that=this;
      return new Promise((resolve,reject)=>{
          if(!that.dbClient){ 
              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(tableName,query){//查询方法
       return new Promise((resolve,reject)=>{
            this.connect().then((db)=>{
                var result=db.collection(tableName).find(query);
                result.toArray(function(err,docs){
                    if(err){
                        reject(err);
                        return;
                    }
                    resolve(docs);
                })
            })
        })
    }
    getObjectId(id){ //MongoDB里面查询 _id 把字符串转换成对象
        return new ObjectID(id);
    }
}
module.exports=DbHelper.getInstance();

接下来就是如何调用的问题了,老规矩继续上代码演示:

var Koa = require('koa'),
   router = require('koa-router')(),
   DbHelper = require('./module/DbHelper.js');
var app = new Koa();
router.get('/',async (ctx)=>{
   var result = await DbHelper.find('category',{});//注意:封装后的find方法返回的是Promise,接收返回值时需加await关键字
   console.log(result);
   ctx.body='首页:'+result[0];
});
//编辑文章信息
router.get('/edit',async (ctx)=>{
    var id = ctx.query.id;//接收参数
    var result = await DbHelper.find('category',{"_id":DbHelper.getObjectId(id)});
    ctx.body='编辑文章:'+result[0].categoryname;
});

app.use(router.routes());   
app.use(router.allowedMethods());
app.listen(8081);

执行结果如下

总结

到这里Node.js操作MongoDB的基本用法就学会了(当然只介绍了查询的方法,增删改的方法可自行扩展),参考文献:

 http://mongodb.github.io/node-mongodb-native

 http://mongodb.github.io/node-mongodb-native/3.0/api/


作者:一蓑烟雨

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

1

支持

1

反对

posted @2020-3-7  拜读(1279)

评论列表

#1楼 2020-11-18 112.251.53.71
aaa

评论内容:



喜欢请打赏

支付宝 微信

请放心支付