node.js零基礎詳細教程(7):node.js操作mongodb,及操作方法的封裝

來源:互聯網
上載者:User

標籤:根據   http   cte   刪除   尋找   詳細教程   基礎   增刪改查   手動   

第七章 建議學習時間4小時  課程共10章

學習方式:詳細閱讀,並手動實現相關代碼

學習目標:此教程將教會大家 安裝Node、搭建伺服器、express、mysql、mongodb、編寫後台商務邏輯、編寫介面,最後完成一個完整的項目後台,預計共10天課程。

 

node.js操作mangodb

 

建立一個用於放置今天檔案的檔案夾,npm init初始化一下,並建立demo1.js用於寫node代碼

使用 npm install mongodb,將mongodb控制模組安裝到本地

在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.11var 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();  });}//deletevar 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();  });};//findvar 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);  });});//updatevar 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();  });};

 

 使用這個封裝

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

 

今天就講到這裡,明天我們講解:項目的建立,後台資料請求介面的編寫

 

關注公眾號,部落格更新即可收到推送

 

node.js零基礎詳細教程(7):node.js操作mongodb,及操作方法的封裝

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.