摘要:接下去完成與本機(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的基本操作
首先我們要先對(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)。
在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)中。
數(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ù)。
數(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é)果的反饋。
數(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é)果的反饋。
數(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é)果為:
同樣是在完成數(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.js與db.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
摘要:使用操作是基于開(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...
摘要:使用內(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...
摘要:使用內(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...
摘要:如圖連接成功后,顯示你的數(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...
摘要:如圖連接成功后,顯示你的數(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...
閱讀 3463·2019-08-30 13:15
閱讀 1402·2019-08-29 18:34
閱讀 825·2019-08-29 15:18
閱讀 3487·2019-08-29 11:21
閱讀 3250·2019-08-29 10:55
閱讀 3700·2019-08-26 10:36
閱讀 1872·2019-08-23 18:37
閱讀 1822·2019-08-23 16:57