node.js后台連接mongodb數據庫增刪查改操作


 

第一步

使用npm下載 mongodb模塊

第二步

后台導入mongodb模塊

注意:引入的模塊會先去找自己文件夾中的node_modules中的模塊,如果沒有,再去找全局(node安裝目錄中的)

let http = require("http");

let mongodb = require('mongodb'); // 導入mongodb的模塊
let MongoClient = mongodb.MongoClient;// 創建連接數據庫的對象

 

連接上數據庫后就可以在后台對數據庫進行操作了

后台服務中原生寫法,代碼解讀

let http = require("http");
// 導入mongodb的模塊
let mongodb = require('mongodb');     //引入的模塊會先去找自己文件夾中的node_modules中的模塊,如果沒有,再去找全局(node安裝目錄中的)
// 創建連接數據庫的對象
let MongoClient = mongodb.MongoClient;

let server = http.createServer();

server.on("request",(req,res) => {
    let database_url = "mongodb://localhost:27017/";   //數據庫的地址
    let database_name = "school";    //數據庫名稱
    let url = database_url + database_name;   //數據庫的地址加數據庫名稱

    MongoClient.connect(url, (err, db) => {     //連接數據庫
        // err表示錯誤信息,數據庫連接失敗的時候err才會有值   db是數據的實例,連接成功以后,所有的操作都是在這個實例進行完成
          if(err){
              console.log('數據庫連接失敗');
              return;
          }
          console.log('連接成功');
          var obj = {"name":"小明把","age":120,"hobby":["睡覺a","吃飯a"],"score":{"yuwen":590,"shuxue":800}}
          db.collection("student").insertMary(obj, (err, result) => {  //向school數據庫中,student的集合中插入一條數據
            if (err){
                console.log('插入失敗');
                return;
            }
            console.log(result);  //一個對象,里面有關於數據庫,和插入數據的方法和屬性           res.end(result.toString())
           db.close();// db.close(); //數據庫關閉每一次數據庫進行一次操作以后,使用完成,都要關閉 
       }); 
});
}) server.listen(
3000);

 

相關的增刪改查方法

數據庫中可以有多個集合,一個集合可以有多個數據,數據一個集合為數組,多條數據為對象的格式(json)存儲

 db.collection("集合名")方法,如果數據庫中沒有該集合,那么在增刪查改的時候會默認添加集合

插入多條數據

 db.collection("集合名").insertMany(插入的數據(對象格式), function(err, result) {
        if (err) throw err;
         
        db.close(); //操作后關閉數據庫
    });

 插入一條數據

db.collection("集合名").insertOne(插入的數據(對象格式),function(err, res) { 
if (err) throw err; console.log("文檔插入成功");
db.close();
});

查詢數據

 db.collection("集合名"). find(查找的數據(對象)).toArray(function(err, result) { // 返回查找到的數據
        if (err) throw err;
        console.log(result);  //返回查找到符合查找對象的數據,數組包對象
        db.close();
    });

更新數據(修改數據)

 

更新一條

db.collection("site").updateOne(被替換的數據(對象), 更新的數據(對象), function(err, res) {
        if (err) throw err;
        console.log("文檔更新成功");
        db.close();
    });

注意:修改數據可以只是修改集合中某條數據的部分數據

更新多條

    var whereStr = {"type":'en'};  // 查詢條件
    var updateStr = {$set: { "url" : "https://www.runoob.com" }};
    dbo.collection(集合名).updateMany(whereStr, updateStr, function(err, res) {
        if (err) throw err;
         console.log(res.result.nModified + " 條文檔被更新");  //result.nModified 為更新的條數。
        db.close();
    });

$set 如果沒有找到,則會創建對應數據,插入集合中

 將$set換為   $unset 進行更新,則會刪除這個字段

 

刪除數據

刪除條件滿足的第一條數據

  db.collection(集合名).deleteOne(查找的條件(對象), function(err, obj) {
        if (err) throw err;
        console.log("文檔刪除成功");
        db.close();
    });

 

刪除多條數據

刪除符合條件的所有數據

  db.collection(集合名).deleteMany(查找條件(對象), function(err, obj) {
        if (err) throw err;
        console.log(obj.result.n + " 條文檔被刪除");
        db.close();
    });

 

查詢分頁

 dbo.collection(集合名).find().skip(2).limit(2).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);  //result返回查詢到經過分頁處理的數據
        db.close();
  });

skip(num)查詢到的所有數據中,跳過num條數據后 返回查詢結果

limit(num)查詢到的所有數據中,返回num條數據

 分頁查詢可以用於當數據過於龐大,進行部分查找

 

DAO層理解及封裝

DAO層緣由

起源於java,java的dao可以寫的非常大

做專門連接數據庫的層,然后暴露接口給后台進行訪問

 

DAO邏輯

DAO層的設計首先是設計DAO的接口,然后就可在模塊中調用此接口來進行數據業務的處理,

而不用關心此接口的具體實現類是哪個類,顯得結構非常清晰,DAO層的數據源配置。

 

DAO層作用

主要是做數據持久層的工作,負責與數據庫進行聯絡的一些任務都封裝在此

簡而言之:它是通過引入模塊 ,將對數據庫操作的方法封裝,然后暴露接口,供后台操作,就是在后天與數據庫中間的中間層

 

 

在node 中,DAO層也是可以寫的非常大。

以下是node連接mongodb的DAO層

 

var mongodb = require("mongodb");
var MongoClient = mongodb.MongoClient;

function _connectDB(callback){
    let database_url = "mongodb://localhost:27017/";   //數據庫的地址
    let database_name = "data";    //數據庫名稱
    let url = database_url + database_name;
    MongoClient.connect(url,function(err,db){
        if(err){
            callback(err,null);
            return;
        }
        callback(err,db);
    })
}

// 暴露接口   // 插入數據
exports.insertOne = function(collectionName,json,callback){
    _connectDB(function(err,db){
        db.collection(collectionName).insertOne(json, (err, result) => {
            // if(err){
            //     callback(err,null)
            //     return;
            // }
            callback(err,result);
            db.close();
        });
    })
}

// 刪除的接口
exports.deleteMany = function(collectionName,json,callback){
    _connectDB(function(err,db){
        db.collection(collectionName).deleteMany(json,function(err,result){
            callback(err,result);
            db.close();
        })
    })
}

// 更新數據
exports.updateMany = function(collectionName,json1,json2,callback){
    _connectDB(function(err,db){
        db.collection(collectionName).updateMany(json1,json2,function(err,result){
            callback(err,result);
            db.close();
        })
    })
}





// 假設說我不需要分頁,page參數就可以不需要傳遞 exports.find = function(collectionName,json,C,D){ var result = []; if(arguments.length == 3){ //這個時候就是不需要分頁的 var callback = C; var limitnum = 0; var skipnum = 0; }else if(arguments.length == 4){ // 假設傳遞進來c的參數為一個對象{ // pageamount : 10, // page : 0 // } var callback = D; //最后一位就為回調函數 var args = C; //分頁的條件 // 省略的條數 var skipnum = args.pageamount * args.page || 0; // 找到的條數 var limitnum = args.pageamount || 0; // 排序 var sort = args.sort || {}; }else{ throw new Error('find函數參數的個數必須為三個或者四個') return; } _connectDB(function(err,db){ var cursor = db.collection(collectionName).find(json).skip(skipnum).limit(limitnum).sort(sort) cursor.each(function(err,doc){ if(err){ callback(err,null); db.close(); return } if(doc!=null){ result.push(doc); }else{ callback(null,result); db.close() } }) }) }

解讀分頁查詢封裝

collectionName:需要查詢數據的集合名
json :查找條件的對象
C,D:  兩種情況
1. 如果不需要分頁查詢,則D參數不需要,而C參數傳入的是回調
2.需要分頁查詢,則傳入的C,就是查詢分頁的對象,D為回調函數
此時的c應是一個對象的形式傳入,而不是數值
//C對象模板
C = {

       pageamount : 10, //跳過的條數
        page : 0       //顯示的條數

}

 

分頁查詢區分

前台假分頁 后台把所有的數據全部從數據庫中獲取過來,然后在原封不動的給前台,前台在根據所有數據來進行分頁。
后台假分頁 后台把所有的數據全部從數據庫中獲取過來,然后根據前端傳遞過來的參數,返回給前端幾條數據。
真的分頁,讓事情給數據庫來做,降低傳輸的內容。

 
 

 

 

 


免責聲明!

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



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