1. 程式人生 > >基於NodeJS的MongoDB資料庫的動態建立

基於NodeJS的MongoDB資料庫的動態建立

MongoDB的Node驅動我選擇“mongodb",注意不要混淆,前者是MongoDB資料庫;後者是操作該資料庫的第三方開源的NodeJS的Package。需要另外安裝:

npm install "mongodb"

言歸正傳:

通常我們都是對某一個已經存在的資料庫進行增、刪、改、查操作,那當該資料庫尚未被建立的時候,我們怎樣動態地新增相應的資料庫呢(例如每當建立一個新使用者時,就建立一個與之相對應的資料庫)?請看下面的程式碼:

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

//連線到admin資料庫
MongoClient.connect("mongodb://localhost:27017/admin",function(err,db){
    if(err)
    {
        console.log(err);
        return;
    }
    else
    {
        //新建一個數據庫例項,資料庫名為自1970年1月1日到當前時間的毫秒數。
        //但在插入一個實際、有效的文件前,該資料庫並未存在於磁碟上,也就是還沒有建立。
        var newSrv = new mongodb.Server('localhost', 27017, {auto_reconnect:true});
        var date=new Date();
        var dbName=date.getTime().toString();
        var newDb = new mongodb.Db(dbName, newSrv, {safe:true});

        newDb.open(function(err,newdb){
            if(err)
            {
                console.log(err);
                return;
            }
            else
            {
                //切換到admin資料庫,並驗證超級管理員"sa"(如果還沒有超級管理員,就自己新增一個)。
                //因為往資料庫新增一個User必須有管理員許可權。
                var adminDb=newDb.admin();
                adminDb.authenticate("sa","123",function(err,ret){
                    if(err)
                    {
                        console.log(err);
                        return;
                    }
                    //為新增的資料庫新增使用者名稱和密碼。
                    newDb.addUser("venchia","forvenchia",function(err,result) {
                        if (err)
                        {
                            console.log(err);
                            return;
                        }
                        else {
                            //驗證剛才新增的資料庫使用者名稱和密碼。
                            newDb.authenticate("venchia", "forvenchia", function (err, result) {
                                if (err) {
                                    console.log(err);
                                    return;
                                }
                                else
                                {
                                    var collName = newDb.collection("CRC");
                                    var doc = {time: Date()};
                                    //插入一個新的文件。
                                    collName.insert(doc, function (err, result) {
                                        newdb.close();
                                        db.close();
                                    })
                                }
                            });
                        }
                    });
                });
            }
        });
    }
});

執行上面的程式碼,檢視一下MongoDB,是不是新增了一個數據庫了呢?

上面為新增的資料庫建立使用者名稱和密碼不是必須的(已測),我們可以直接往該資料庫寫入文件是因為我們是在通過了資料庫管理員的驗證之後進行的。但,因為我們沒為該資料庫建立使用者名稱和密碼,往後對該資料庫的所有訪問必須先通過資料庫管理員的驗證之後才能進行!除非我們在啟動MongoDB時去掉-auth引數,這樣我們就可以不用任何驗證即可對所有的資料庫進行訪問(已測)!