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();
  });

};

 

 使用這個封裝

具體的封裝的使用方法,我們將在下一節課項目中去介紹

 

今天就講到這里,明天我們講解:項目的創建,后台數據請求接口的編寫

 

關注公眾號,博客更新即可收到推送

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM