node.js操做Mongodb數據庫

1、node.js對於mongodb的基本操做

一、數據庫的開機

首先咱們要先對數據庫進行開機的操做,創建一個文件夾用於存放數據庫文檔。如D:\mongo,接下去在cmd當中鍵入命令-> mongod --dbpath D:\mongo來實現數據庫的開機。以下圖所示:node

圖片描述

接下去就保持這個cmd控制面板處於這種狀態,以確保數據庫處於開機狀態。mongodb

二、鏈接數據庫

node.js當中操做mongodb數據庫須要引入第三方模塊包mongodb。因此咱們先在項目文件夾下鍵入命令-> npm install mongodb來完成下載包。接下去再用const MongoClient = require('mongodb').MongoClient;來完成引包。示例代碼以下所示:數據庫

const MongoClient = require('mongodb').MongoClient;
var dburl = "mongodb://127.0.0.1:27017/test";
MongoClient.connect(dburl,(err,db)=>{
    if(err){
        console.log('數據庫鏈接失敗!');
        return;
    };
    console.log(db);
});

咱們先定義一個dburl變量用於指定本機上27017端口號(mongodb的默認端口號)上的數據庫地址。test爲自定義的數據庫的名字。若該數據庫不存在則會自動完成該數據庫的新建。接下去完成與本機上test數據庫的鏈接,這是一個異步函數,當鏈接完成以後,觸發執行其回調函數,參數db指代這個數據庫自己。接下去對數據庫的增刪改查操做都寫在鏈接的回調函數當中。npm

三、插入數據

數據插入操做,指的是對數據庫的某個指定集合進行文檔對象的插入。一樣是在完成數據庫鏈接的回調函數當中對db這個對象進行操做。示例代碼以下所示:json

const MongoClient = require('mongodb').MongoClient;
var dburl = "mongodb://127.0.0.1:27017/test";
MongoClient.connect(dburl,(err,db)=>{
    if(err){
        console.log('數據庫鏈接失敗!');
        return;
    };
    db.collection('student').insertOne({"name":"qianqian"},(err,result)=>{
        if(err){
            console.log('數據插入失敗!');
            db.close();
            return;
        };
        console.log(result);
        db.close();
    });
});

在用node命令運行該文件以後,這時候咱們能夠在控制檯或在可視化工具當中查看插入結果。segmentfault

圖片描述

db對象的collection方法當中寫入集合的名字,若該集合不存在則自動完成新建,使用方法insertOne()來完成一條文檔的插入,第一個參數爲一個json對象,即插入的那一條文檔數據。當完成插入操做以後觸發執行其回調函數,result表示對插入結果的反饋。因爲數據庫不能進行長鏈接,咱們通常都在完成數據庫操做的回調函數的最後加上db.close();來關閉數據庫。下一次數據庫操做時須要從新鏈接數據庫。數組

四、刪除數據

數據刪除操做,指的是對數據庫的某個指定集合當中匹配上篩選條件的文檔進行刪除。一樣是在完成數據庫鏈接的回調函數當中對db這個對象進行操做。示例代碼以下所示:異步

const MongoClient = require('mongodb').MongoClient;
var dburl = "mongodb://127.0.0.1:27017/test";
MongoClient.connect(dburl,(err,db)=>{
    if(err){
        console.log('數據庫鏈接失敗!');
        return;
    };
    db.collection('student').deleteMany({"name":"qianqian"},(err,result)=>{
        if(err){
            console.log('數據刪除失敗!');
            db.close();
            return;
        };
        console.log(result);
        db.close();
    });
});

使用方法deleteMany()來對該集合當中全部符合篩選條件的文檔所有進行刪除,第一個參數爲一個json對象,即篩選條件。當完成刪除操做以後觸發執行其回調函數,result表示對刪除結果的反饋。模塊化

五、修改數據

數據修改操做,指的是對數據庫的某個指定集合當中匹配上篩選條件的全部文檔進行修改。一樣是在完成數據庫鏈接的回調函數當中對db這個對象進行操做。示例代碼以下所示:函數

const MongoClient = require('mongodb').MongoClient;
var dburl = "mongodb://127.0.0.1:27017/test";
MongoClient.connect(dburl,(err,db)=>{
    if(err){
        console.log('數據庫鏈接失敗!');
        return;
    };
    db.collection('student').updateMany({"name":"qianqian"},{$set:{"age":18}},(err,result)=>{
        if(err){
            console.log('數據修改失敗!');
            db.close();
            return;
        };
        console.log(result);
        db.close();
    });
});

使用方法updateMany()來對該集合當中全部符合篩選條件的文檔所有進行修改,第一個參數爲一個json對象,即篩選條件。第二個參數爲一個json對象,即修改條件,語法如上所示。當沒有寫$set這個關鍵字,即{"age":18}表明把匹配上的文檔進行替換。當完成修改操做以後觸發執行其回調函數,result表示對修改結果的反饋。

六、查找數據

數據查找操做,指的是對數據庫的某個指定集合當中匹配上篩選條件的全部文檔進行查找。一樣是在完成數據庫鏈接的回調函數當中對db這個對象進行操做。示例代碼以下所示:

const MongoClient = require('mongodb').MongoClient;
var dburl = "mongodb://127.0.0.1:27017/test";
MongoClient.connect(dburl,(err,db)=>{
    if(err){
        console.log('數據庫鏈接失敗!');
        return;
    };
    var cursor = db.collection("student").find({"name":"qianqian"});
    var result = [];
    cursor.each((err,doc)=>{
        if(err){
            console.log('數據查找失敗!');
            db.close();
            return;
        };
        if(doc!=null){
            result.push(doc);
        }else{
            console.log(result);
            db.close();
        };
    });
});

使用方法find()來對該集合當中全部符合篩選條件的文檔所有進行查找,第一個參數爲一個json對象,即篩選條件。先定義一個空數組,用於存放符合條件的文檔對象,當完成查找操做以後觸發執行其回調函數,這裏的result表示符合條件的文檔對象的數組。

圖片描述

咱們在find()方法後面繼續加上sort()方法能夠實現對查找的文檔對象的排序操做,參數一樣是一個json對象。此外mongodb模塊還提供了兩個函數limit()表示限制讀取的條數,skip()表示略過的條數。其參數均爲number類型。如把上述代碼修改成: var cursor = db.collection("student").find({"name":"qianqian"}).sort({"age":-1}).skip(0).limit(2);查找結果爲:

圖片描述

七、獲取該集合當中文檔對象的總數

一樣是在完成數據庫鏈接的回調函數當中對db這個對象進行操做。示例代碼以下所示:

const MongoClient = require('mongodb').MongoClient;
var dburl = "mongodb://127.0.0.1:27017/test";
MongoClient.connect(dburl,(err,db)=>{
    if(err){
        console.log('數據庫鏈接失敗!');
        return;
    };
    db.collection("student").count({}).then(function(count){
        console.log(count);
        db.close();
    });
});

在回調函數當中的count即表明數據庫的student這個集合當中數據文檔的數目。

2、node.js操做mongodb的經常使用函數的封裝

咱們根據 node.js當中模塊化開發的基本流程 寫一個db.js模塊,在該模塊當中封裝對數據庫的一些基本操做函數。其中db.js的示例代碼以下所示:

const MongoClient = require('mongodb').MongoClient;
var dburl = "mongodb://127.0.0.1:27017/test";
//鏈接數據庫操做
function _connectDB(callback){
    MongoClient.connect(dburl,(err,db)=>{
        callback(err,db);
    });
};
//插入函數的封裝
module.exports.insertOne = function(collection,json,callback){
    _connectDB(function(err,db){
        if(err){
            console.log('數據庫鏈接失敗!');
            return;
        };
        db.collection(collection).insertOne(json,(err,result)=>{
            callback(err,result);
            db.close();
        })
    })
};
//刪除函數的封裝
module.exports.deleteMany = function(collection,json,callback){
    _connectDB(function(err,db){
        if(err){
            console.log('數據庫鏈接失敗!');
            return;
        };
        db.collection(collection).deleteMany(json,(err,result)=>{
            callback(err,result);
            db.close();
        });
    });
};
//修改函數的封裝
module.exports.updateMany = function(collection,json1,json2,callback){
    _connectDB(function(err,db){
        if(err){
            console.log('數據庫鏈接失敗!');
            return;
        };
        db.collection(collection).updateMany(json1,json2,(err,result)=>{
            callback(err,result);
            db.close();
        });
    });
};
//獲取集合當中文檔的總條數
module.exports.getAllCount = function(collection,callback){
    _connectDB(function(err,db){
        if(err){
            console.log('數據庫鏈接失敗!');
            return;
        };
        db.collection(collection).count({}).then(function(count){
            callback(count);
            db.close();
        });
    });
};
//查找函數的封裝
module.exports.find = function(collection,json,C,D){
    if(arguments.length == 3){
        var callback = C;
        var skipnumber = 0;
        var limit = 0;
        var sort = {};
    }else if(arguments.length == 4){
        var callback = D;
        var args = C;
        var skipnumber = args.pageamount * args.page;
        var limit = args.pageamount;
        var sort = args.sort;
    }else{
        throw new Error('find函數參數個數不正確!');
        return;
    }
    var result = [];
    _connectDB(function(err,db){
        if(err){
            console.log('數據庫鏈接失敗!');
            return;
        };
        var cursor = db.collection(collection).find(json).sort(sort).limit(limit)
        .skip(skipnumber);
        cursor.each((err,doc)=>{
            if(err){
                callback(err,null);
                db.close();
                return;
            };
            if(doc!=null){
                result.push(doc);
            }else{
                callback(null,result);
                db.close();
            }
        })
    });
};

咱們每次在使用該模塊以前,先對本機上的mongodb數據庫進行開機操做,而後在項目文件夾下下載mongodb這個第三方模塊包,而後修改db.js當中的dburl的值,接下去只要在咱們本身的主文件用require的方式進行引入便可。如主文件1.jsdb.js處於同一目錄下,則在1.js當中使用const db = require('./db.js');對該模塊進行引入便可。下面給出主文件的示例代碼,做爲該模塊的使用示範:

const db = require('./db.js');
db.insertOne('student',{'name':'qianqiang'},(err,result)=>{
    if(err){
        console.log('數據插入失敗!');
        db.close();
        return;
    };
    console.log(result);
});
db.deleteMany('student',{'age':11},(err,result)=>{
    if(err){
        console.log('數據刪除失敗!');
        db.close();
        return;
    };
    console.log(result);
});
db.updateMany('student',{'age':18},{$set:{'age':25}},(err,result)=>{
    if(err){
        console.log('數據修改失敗!');
        db.close();
        return;
    };
    console.log(result);
});
db.find('student',{},{'pageamount':2,'page':4,'sort':{}},(err,result)=>{
    if(err){
        console.log('數據查找失敗!');
        db.close();
        return;
    };
    console.log(result);
});
db.getAllCount('student',function(count){
   console.log(count);
});

其中find函數當中的pageamount表示每頁顯示的文檔對象的條數,page表示顯示第幾頁的內容(從第0頁開始計數)。以此來實現對查找數據分頁顯示的功能。

相關文章
相關標籤/搜索