国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

node.js操作Mongodb數(shù)據(jù)庫(kù)

SKYZACK / 3519人閱讀

摘要:接下去完成與本機(jī)上數(shù)據(jù)庫(kù)的連接,這是一個(gè)異步函數(shù),當(dāng)連接完成之后,觸發(fā)執(zhí)行其回調(diào)函數(shù),參數(shù)指代這個(gè)數(shù)據(jù)庫(kù)本身。同樣是在完成數(shù)據(jù)庫(kù)連接的回調(diào)函數(shù)當(dāng)中對(duì)這個(gè)對(duì)象進(jìn)行操作。當(dāng)完成修改操作之后觸發(fā)執(zhí)行其回調(diào)函數(shù),表示對(duì)修改結(jié)果的反饋。

一、node.js對(duì)于mongodb的基本操作
1、數(shù)據(jù)庫(kù)的開(kāi)機(jī)

首先我們要先對(duì)數(shù)據(jù)庫(kù)進(jìn)行開(kāi)機(jī)的操作,建立一個(gè)文件夾用于存放數(shù)據(jù)庫(kù)文檔。如D:mongo,接下去在cmd當(dāng)中鍵入命令-> mongod --dbpath D:mongo來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的開(kāi)機(jī)。如下圖所示:

接下去就保持這個(gè)cmd控制面板處于這種狀態(tài),以確保數(shù)據(jù)庫(kù)處于開(kāi)機(jī)狀態(tài)。

2、連接數(shù)據(jù)庫(kù)

node.js當(dāng)中操作mongodb數(shù)據(jù)庫(kù)需要引入第三方模塊包mongodb。所以我們先在項(xiàng)目文件夾下鍵入命令-> npm install mongodb來(lái)完成下載包。接下去再用const MongoClient = require("mongodb").MongoClient;來(lái)完成引包。示例代碼如下所示:

const MongoClient = require("mongodb").MongoClient;
var dburl = "mongodb://127.0.0.1:27017/test";
MongoClient.connect(dburl,(err,db)=>{
    if(err){
        console.log("數(shù)據(jù)庫(kù)連接失??!");
        return;
    };
    console.log(db);
});

我們先定義一個(gè)dburl變量用于指定本機(jī)上27017端口號(hào)(mongodb的默認(rèn)端口號(hào))上的數(shù)據(jù)庫(kù)地址。test為自定義的數(shù)據(jù)庫(kù)的名字。若該數(shù)據(jù)庫(kù)不存在則會(huì)自動(dòng)完成該數(shù)據(jù)庫(kù)的新建。接下去完成與本機(jī)上test數(shù)據(jù)庫(kù)的連接,這是一個(gè)異步函數(shù),當(dāng)連接完成之后,觸發(fā)執(zhí)行其回調(diào)函數(shù),參數(shù)db指代這個(gè)數(shù)據(jù)庫(kù)本身。接下去對(duì)數(shù)據(jù)庫(kù)的增刪改查操作都寫(xiě)在連接的回調(diào)函數(shù)當(dāng)中。

3、插入數(shù)據(jù)

數(shù)據(jù)插入操作,指的是對(duì)數(shù)據(jù)庫(kù)的某個(gè)指定集合進(jìn)行文檔對(duì)象的插入。同樣是在完成數(shù)據(jù)庫(kù)連接的回調(diào)函數(shù)當(dāng)中對(duì)db這個(gè)對(duì)象進(jìn)行操作。示例代碼如下所示:

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

在用node命令運(yùn)行該文件之后,這時(shí)候我們可以在控制臺(tái)或在可視化工具當(dāng)中查看插入結(jié)果。

db對(duì)象的collection方法當(dāng)中寫(xiě)入集合的名字,若該集合不存在則自動(dòng)完成新建,使用方法insertOne()來(lái)完成一條文檔的插入,第一個(gè)參數(shù)為一個(gè)json對(duì)象,即插入的那一條文檔數(shù)據(jù)。當(dāng)完成插入操作之后觸發(fā)執(zhí)行其回調(diào)函數(shù),result表示對(duì)插入結(jié)果的反饋。由于數(shù)據(jù)庫(kù)不能進(jìn)行長(zhǎng)連接,我們一般都在完成數(shù)據(jù)庫(kù)操作的回調(diào)函數(shù)的最后加上db.close();來(lái)關(guān)閉數(shù)據(jù)庫(kù)。下一次數(shù)據(jù)庫(kù)操作時(shí)需要重新連接數(shù)據(jù)庫(kù)。

4、刪除數(shù)據(jù)

數(shù)據(jù)刪除操作,指的是對(duì)數(shù)據(jù)庫(kù)的某個(gè)指定集合當(dāng)中匹配上篩選條件的文檔進(jìn)行刪除。同樣是在完成數(shù)據(jù)庫(kù)連接的回調(diào)函數(shù)當(dāng)中對(duì)db這個(gè)對(duì)象進(jìn)行操作。示例代碼如下所示:

const MongoClient = require("mongodb").MongoClient;
var dburl = "mongodb://127.0.0.1:27017/test";
MongoClient.connect(dburl,(err,db)=>{
    if(err){
        console.log("數(shù)據(jù)庫(kù)連接失?。?);
        return;
    };
    db.collection("student").deleteMany({"name":"qianqian"},(err,result)=>{
        if(err){
            console.log("數(shù)據(jù)刪除失?。?);
            db.close();
            return;
        };
        console.log(result);
        db.close();
    });
});

使用方法deleteMany()來(lái)對(duì)該集合當(dāng)中所有符合篩選條件的文檔全部進(jìn)行刪除,第一個(gè)參數(shù)為一個(gè)json對(duì)象,即篩選條件。當(dāng)完成刪除操作之后觸發(fā)執(zhí)行其回調(diào)函數(shù),result表示對(duì)刪除結(jié)果的反饋。

5、修改數(shù)據(jù)

數(shù)據(jù)修改操作,指的是對(duì)數(shù)據(jù)庫(kù)的某個(gè)指定集合當(dāng)中匹配上篩選條件的所有文檔進(jìn)行修改。同樣是在完成數(shù)據(jù)庫(kù)連接的回調(diào)函數(shù)當(dāng)中對(duì)db這個(gè)對(duì)象進(jìn)行操作。示例代碼如下所示:

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

使用方法updateMany()來(lái)對(duì)該集合當(dāng)中所有符合篩選條件的文檔全部進(jìn)行修改,第一個(gè)參數(shù)為一個(gè)json對(duì)象,即篩選條件。第二個(gè)參數(shù)為一個(gè)json對(duì)象,即修改條件,語(yǔ)法如上所示。當(dāng)沒(méi)有寫(xiě)$set這個(gè)關(guān)鍵字,即{"age":18}代表把匹配上的文檔進(jìn)行替換。當(dāng)完成修改操作之后觸發(fā)執(zhí)行其回調(diào)函數(shù),result表示對(duì)修改結(jié)果的反饋。

6、查找數(shù)據(jù)

數(shù)據(jù)查找操作,指的是對(duì)數(shù)據(jù)庫(kù)的某個(gè)指定集合當(dāng)中匹配上篩選條件的所有文檔進(jìn)行查找。同樣是在完成數(shù)據(jù)庫(kù)連接的回調(diào)函數(shù)當(dāng)中對(duì)db這個(gè)對(duì)象進(jìn)行操作。示例代碼如下所示:

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

使用方法find()來(lái)對(duì)該集合當(dāng)中所有符合篩選條件的文檔全部進(jìn)行查找,第一個(gè)參數(shù)為一個(gè)json對(duì)象,即篩選條件。先定義一個(gè)空數(shù)組,用于存放符合條件的文檔對(duì)象,當(dāng)完成查找操作之后觸發(fā)執(zhí)行其回調(diào)函數(shù),這里的result表示符合條件的文檔對(duì)象的數(shù)組。

我們?cè)?b>find()方法后面繼續(xù)加上sort()方法可以實(shí)現(xiàn)對(duì)查找的文檔對(duì)象的排序操作,參數(shù)同樣是一個(gè)json對(duì)象。此外mongodb模塊還提供了兩個(gè)函數(shù)limit()表示限制讀取的條數(shù),skip()表示略過(guò)的條數(shù)。其參數(shù)均為number類型。如把上述代碼修改為: var cursor = db.collection("student").find({"name":"qianqian"}).sort({"age":-1}).skip(0).limit(2);查找結(jié)果為:

7、獲取該集合當(dāng)中文檔對(duì)象的總數(shù)

同樣是在完成數(shù)據(jù)庫(kù)連接的回調(diào)函數(shù)當(dāng)中對(duì)db這個(gè)對(duì)象進(jìn)行操作。示例代碼如下所示:

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

在回調(diào)函數(shù)當(dāng)中的count即代表數(shù)據(jù)庫(kù)的student這個(gè)集合當(dāng)中數(shù)據(jù)文檔的數(shù)目。

二、node.js操作mongodb的常用函數(shù)的封裝

我們根據(jù) node.js當(dāng)中模塊化開(kāi)發(fā)的基本流程 寫(xiě)一個(gè)db.js模塊,在該模塊當(dāng)中封裝對(duì)數(shù)據(jù)庫(kù)的一些基本操作函數(shù)。其中db.js的示例代碼如下所示:

const MongoClient = require("mongodb").MongoClient;
var dburl = "mongodb://127.0.0.1:27017/test";
//連接數(shù)據(jù)庫(kù)操作
function _connectDB(callback){
    MongoClient.connect(dburl,(err,db)=>{
        callback(err,db);
    });
};
//插入函數(shù)的封裝
module.exports.insertOne = function(collection,json,callback){
    _connectDB(function(err,db){
        if(err){
            console.log("數(shù)據(jù)庫(kù)連接失敗!");
            return;
        };
        db.collection(collection).insertOne(json,(err,result)=>{
            callback(err,result);
            db.close();
        })
    })
};
//刪除函數(shù)的封裝
module.exports.deleteMany = function(collection,json,callback){
    _connectDB(function(err,db){
        if(err){
            console.log("數(shù)據(jù)庫(kù)連接失??!");
            return;
        };
        db.collection(collection).deleteMany(json,(err,result)=>{
            callback(err,result);
            db.close();
        });
    });
};
//修改函數(shù)的封裝
module.exports.updateMany = function(collection,json1,json2,callback){
    _connectDB(function(err,db){
        if(err){
            console.log("數(shù)據(jù)庫(kù)連接失?。?);
            return;
        };
        db.collection(collection).updateMany(json1,json2,(err,result)=>{
            callback(err,result);
            db.close();
        });
    });
};
//獲取集合當(dāng)中文檔的總條數(shù)
module.exports.getAllCount = function(collection,callback){
    _connectDB(function(err,db){
        if(err){
            console.log("數(shù)據(jù)庫(kù)連接失敗!");
            return;
        };
        db.collection(collection).count({}).then(function(count){
            callback(count);
            db.close();
        });
    });
};
//查找函數(shù)的封裝
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函數(shù)參數(shù)個(gè)數(shù)不正確!");
        return;
    }
    var result = [];
    _connectDB(function(err,db){
        if(err){
            console.log("數(shù)據(jù)庫(kù)連接失敗!");
            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();
            }
        })
    });
};

我們每次在使用該模塊之前,先對(duì)本機(jī)上的mongodb數(shù)據(jù)庫(kù)進(jìn)行開(kāi)機(jī)操作,然后在項(xiàng)目文件夾下下載mongodb這個(gè)第三方模塊包,然后修改db.js當(dāng)中的dburl的值,接下去只要在我們自己的主文件用require的方式進(jìn)行引入即可。如主文件1.jsdb.js處于同一目錄下,則在1.js當(dāng)中使用const db = require("./db.js");對(duì)該模塊進(jìn)行引入即可。下面給出主文件的示例代碼,作為該模塊的使用示范:

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

其中find函數(shù)當(dāng)中的pageamount表示每頁(yè)顯示的文檔對(duì)象的條數(shù),page表示顯示第幾頁(yè)的內(nèi)容(從第0頁(yè)開(kāi)始計(jì)數(shù))。以此來(lái)實(shí)現(xiàn)對(duì)查找數(shù)據(jù)分頁(yè)顯示的功能。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/19129.html

相關(guān)文章

  • Node.js操作MongoDB數(shù)據(jù)庫(kù)

    摘要:使用操作是基于開(kāi)發(fā)的驅(qū)動(dòng),可以在異步的環(huán)境下執(zhí)行。比如,啟動(dòng),直接在終端輸入就可以啟動(dòng)啦默認(rèn)運(yùn)行在。還可以自定義端口或者輸入的使用首先新建一個(gè)名為的文件夾,該文件夾就是數(shù)據(jù)庫(kù)目錄。 使用Mongoose操作MongoDB Mongoose是基于node-mongodb-native開(kāi)發(fā)的MongoDB nodejs驅(qū)動(dòng),可以在異步的環(huán)境下執(zhí)行。 關(guān)于在Mac下安裝和使用MongoDB...

    chaosx110 評(píng)論0 收藏0
  • 初嘗node.js + Express + MongoDB + Vue.js 項(xiàng)目構(gòu)建(2)

    摘要:使用內(nèi)在模塊發(fā)送響應(yīng)數(shù)據(jù)監(jiān)聽(tīng)端口終端打印如下信息使用框架本項(xiàng)目使用的框架來(lái)起服務(wù)器。數(shù)據(jù)庫(kù)中文檔每一行的數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)和基本一樣,所有存儲(chǔ)在集合中的數(shù)據(jù)都是格式,是一種類的一種二進(jìn)制形式的存儲(chǔ)格式,簡(jiǎn)稱。 前言 經(jīng)過(guò)上一篇經(jīng)濟(jì)基礎(chǔ)構(gòu)建的完成,那么現(xiàn)在正式開(kāi)始碼代碼吧! 項(xiàng)目架構(gòu) showImg(https://segmentfault.com/img/bVNkQM?w=322&h=58...

    kevin 評(píng)論0 收藏0
  • 初嘗node.js + Express + MongoDB + Vue.js 項(xiàng)目構(gòu)建(2)

    摘要:使用內(nèi)在模塊發(fā)送響應(yīng)數(shù)據(jù)監(jiān)聽(tīng)端口終端打印如下信息使用框架本項(xiàng)目使用的框架來(lái)起服務(wù)器。數(shù)據(jù)庫(kù)中文檔每一行的數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)和基本一樣,所有存儲(chǔ)在集合中的數(shù)據(jù)都是格式,是一種類的一種二進(jìn)制形式的存儲(chǔ)格式,簡(jiǎn)稱。 前言 經(jīng)過(guò)上一篇經(jīng)濟(jì)基礎(chǔ)構(gòu)建的完成,那么現(xiàn)在正式開(kāi)始碼代碼吧! 項(xiàng)目架構(gòu) showImg(https://segmentfault.com/img/bVNkQM?w=322&h=58...

    zhisheng 評(píng)論0 收藏0
  • Node中基于Mongoose對(duì)MongoDB進(jìn)行增刪查改(CRUD)操作(一)

    摘要:如圖連接成功后,顯示你的數(shù)據(jù)庫(kù),在這個(gè)節(jié)目可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。如圖安裝與加載首先假定你已經(jīng)安裝了,命令行工具輸入在使用的文件中即可。創(chuàng)建讀取更新刪除單值讀取上文是在中基于對(duì)進(jìn)行增刪查改操作的簡(jiǎn)單介紹,以后會(huì)有進(jìn)階的文章。 關(guān)鍵詞:mongodb安裝 mongoose使用 robomongo mongoose的CRUD操作 mongoose的查詢,增加,修改,刪除 工具介紹 Mon...

    lemon 評(píng)論0 收藏0
  • Node中基于Mongoose對(duì)MongoDB進(jìn)行增刪查改(CRUD)操作(一)

    摘要:如圖連接成功后,顯示你的數(shù)據(jù)庫(kù),在這個(gè)節(jié)目可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。如圖安裝與加載首先假定你已經(jīng)安裝了,命令行工具輸入在使用的文件中即可。創(chuàng)建讀取更新刪除單值讀取上文是在中基于對(duì)進(jìn)行增刪查改操作的簡(jiǎn)單介紹,以后會(huì)有進(jìn)階的文章。 關(guān)鍵詞:mongodb安裝 mongoose使用 robomongo mongoose的CRUD操作 mongoose的查詢,增加,修改,刪除 工具介紹 Mon...

    SillyMonkey 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<