• node.js零基础详细教程(7):node.js操作mongodb,及操作方法的封装


    第七章 建议学习时间4小时  课程共10章

    学习方式:详细阅读,并手动实现相关代码

    学习目标:此教程将教会大家 安装Node、搭建服务器、express、mysql、mongodb、编写后台业务逻辑、编写接口,最后完成一个完整的项目后台,预计共10天课程。

    node.js操作mangodb


    创建一个用于放置今天文件的文件夹,npm init初始化一下,并创建demo1.js用于写node代码

    使用

    npm install mongodb@2.2.33

    ,将mongodb控制模块安装到本地 (由于后来的mongodb版本操作方法有改变,这里使用 @2.2.33来安装这个版本,下图是后来换的,所以和前面命令行的截图风格不同

    在demo1.js中写入下面操作代码

     1 var mongo = require("mongodb"); //引入mongodb模块
     2 var assert = require("assert"); //引入断言模块
     3 
     4 var MongoClient = mongo.MongoClient;  //开启服务
     5 
     6 var Urls = "mongodb://localhost:27017/demo2";  //url储存  放在连接池中。
     7 
     8 MongoClient.connect(Urls,function(err,db){  //获取连接
     9     assert.equal(null,err);  //使用断言模块代替以前的 if判断
    10     
    11 
    12     //插入数据
    13     db.collection("t1").insert({"name":"xiaoming"},function(err,result){ //连接到数据库上面,并使用参数传入集合
    14         assert.equal(null,err);
    15         console.log(result);
    16         db.close();
    17     });
    18 
    19 
    20 });

    代码解释:

    1行2行引入了需要的两个模块,4行开启服务器,

    6行是url的地址,一般默认安装的时候地址和端口是 “mongodb://localhost:27017”,后面的demo2是我的mongodb的数据库的名字(你替换成你自己创建的数据库即可)

    8行是根据上面声明的url去和数据库建立连接,connect方法有两个参数,1、连接的数据库地址,2、回调函数,回调函数两个参数表示发送错误,以及正确的情况下返回数据库的链接,我们就可以在此链接上进行操作了。

    注意:这里的链接是初学者常报错的地方,如果报错,去确认地址和数据库名字是否填错,确保自己的数据库中有对应的库名字。

    重点讲解下 13行,这里是node插入数据库的操作, db.collection("t1")表示获取需要操作的表,  insert是插入方法,方法接收两个参数,1、插入的内容,2、回调函数,回调函数两个参数表示发送错误,以及正确的情况下返回的结果。

    15行打印出错结果,16行关闭和数据库的链接(如果一直连着,浏览器会崩溃)

    执行demo1.js。成功即可得到下图结果   (  划线处的 n表示成功了1条 )

    查询数据库,可以看到新添加的数据

    查找:  find方法,传入查找筛选的json(如果不传,就查询全部),后面的toArray是将数据作处理之后变成我们可以识别的数组格式

    后面的操作,除了中部的数据操作部分代码不同,其余代码都是相同的。

     1 var mongo = require("mongodb"); //引入mongodb模块
     2 var assert = require("assert"); //引入断言模块
     3 
     4 var MongoClient = mongo.MongoClient;  //开启服务
     5 
     6 var Urls = "mongodb://localhost:27017/demo2";  //url储存  放在连接池中。
     7 
     8 MongoClient.connect(Urls,function(err,db){  //获取连接
     9     assert.equal(null,err);  //使用断言模块代替以前的 if判断
    10     
    11 
    12     //查找数据
    13     db.collection("t1").find({"name":"xiaoming"}).toArray(function(err,result){
    14         assert.equal(null,err);
    15         console.log(result);
    16         db.close();
    17     })
    18 
    19 
    20 });

    运行,成功查找到上一步插入的数据

     删除    使用 deleteOne删除一条数据,两个参数 1、删除的查找json 2、回调函数

     1 var mongo = require("mongodb"); //引入mongodb模块
     2 var assert = require("assert"); //引入断言模块
     3 
     4 var MongoClient = mongo.MongoClient;  //开启服务
     5 
     6 var Urls = "mongodb://localhost:27017/demo2";  //url储存  放在连接池中。
     7 
     8 MongoClient.connect(Urls,function(err,db){  //获取连接
     9     assert.equal(null,err);  //使用断言模块代替以前的 if判断
    10     
    11     //删除数据
    12     db.collection("t1").deleteOne({"name":"xiaoming"},function(err,result){ //连接到数据库上面,并使用参数传入集合
    13         assert.equal(null,err);
    14         console.log(result);
    15         db.close();
    16     });
    17 
    18 });

    执行,成功的结果

     查询数据库发现 xiaoming那条数据被删除了

    修改: 使用 update方法,包括三个参数,1、查询条件,2、修改的字段以及修改器,3、回调函数

    var mongo = require("mongodb"); //引入mongodb模块
    var assert = require("assert"); //引入断言模块
    
    var MongoClient = mongo.MongoClient;  //开启服务
    
    var Urls = "mongodb://localhost:27017/demo2";  //url储存  放在连接池中。
    
    MongoClient.connect(Urls,function(err,db){  //获取连接
        assert.equal(null,err);  //使用断言模块代替以前的 if判断
        
        //修改数据
        db.collection("t1").update({"name":"zhangsan1"},{$set:{"name":"xiaoming"}},function(err,result){ //连接到数据库上面,并使用参数传入集合
            assert.equal(null,err);
            console.log(result);
            db.close();
        });
    
    });

    运行成功的结果

     

    查询数据库发现,原来的zhangsan1被修改成了xiaoming

     到这里,就实现了通过nodejs增删改查mongodb数据库

    封装增删改查的代码


    创建一个封装js的文件  dbhandler.js  ,将下列代码复制进去(封装的代码文字解说太困难,这里就不解释了,只给大家介绍如何使用,以后可能会出视频教程,到时候再详细解释这个封装)

     --   注:第6行的url后面的数据库 替换成自己要操作的数据库,其他都不用变

    var mongo=require("mongodb");//@2.2.11
    var MongoClient = mongo.MongoClient;
    var assert = require('assert');
    var host="localhost";
    var port="27017";
    var Urls = 'mongodb://localhost:27017/demo2';
    
    
    //add一条数据
    var add = function(db,collections,selector,fn){
      var collection = db.collection(collections);
      collection.insertMany([selector],function(err,result){
        assert.equal(err,null);
        fn(result);
        db.close();
      });
    }
    //delete
    var deletes = function(db,collections,selector,fn){
      var collection = db.collection(collections);
      collection.deleteOne(selector,function(err,result){
        try{assert.equal(err,null)}catch(e){
          console.log(e);
        }
        fn(result);
        db.close();
      });
    
    };
    //find
    var find = function(db,collections,selector,fn){
      var collection = db.collection(collections);
    
        collection.find(selector).toArray(function(err,docs){
    
          try{
            assert.equal(err,null);
          }catch(e){
            console.log(e);
            docs = [];
          }
    
          fn(docs);
          db.close();
        });
    
    }
    //(权限控制) -- 暂时没有用
    MongoClient.connect(Urls, function(err, db) {
      find(db,"powers",null,function(d){
        console.log("123s");
        console.log(d.length);
      });
    });
    
    //update
    var updates = function(db,collections,selector,fn){
      var collection = db.collection(collections);
      console.log(selector);
      collection.updateOne(selector[0],selector[1],function(err,result){
        assert.equal(err,null);
        assert.equal(1,result.result.n);
        fn(result);
        db.close();
      });
    
    }
    
    //方法都赋值到操作对象上,便于调用
    var methodType = {
      login:find,
      show:find,
      add:add,
      getpower:find,
      update:updates,
      delete:deletes,
      updatepass:updates,
      adduser:add,
      usershow:find,
      getcategory:find,
      getcourse:find,
      find:find,
      state:find,
      top:find,
      AddDirectory:find,
      updateDirectory:updates,
      deleteDirectory:deletes,
      showlist:find,
      showdir:find
    };
    //主逻辑
    module.exports = function(req,res,collections,selector,fn){
      MongoClient.connect(Urls, function(err, db) {
        assert.equal(null, err);
        console.log("Connected correctly to server");
        methodType[req.query.action](db,collections,selector,fn);
        db.close();
      });
    
    };

     使用这个封装

    具体的封装的使用方法,我们将在下一节课项目中去介绍

    今天就讲到这里,明天我们讲解:项目的创建,后台数据请求接口的编写

    关注公众号,博客更新即可收到推送

  • 相关阅读:
    Linux系统工程师必学的系统管理命令(1)
    学习中LINUX中常见问题(精华)
    "Visual Studio .NET已检测到指定的Web服务器运行的不是ASP.NET 1.1 版..."的解决办法
    今天,我决定离开
    Web Standards for Business 恐怕我没有时间翻译完了,有兴趣的可以继续
    了解到的关于深圳的一些事情
    谢谢大家,在深圳找到公司实习,发贴庆祝
    微软状告Google挖墙角,呵呵,微软坐不住了
    每个人都是生活的导演
    闷啊,一个人的孤单,一个人的所谓的项目
  • 原文地址:https://www.cnblogs.com/chengduxiaoc/p/7049498.html
Copyright © 2020-2023  润新知