摘要:接下去完成與本機上數(shù)據(jù)庫的連接,這是一個異步函數(shù),當連接完成之后,觸發(fā)執(zhí)行其回調(diào)函數(shù),參數(shù)指代這個數(shù)據(jù)庫本身。同樣是在完成數(shù)據(jù)庫連接的回調(diào)函數(shù)當中對這個對象進行操作。當完成修改操作之后觸發(fā)執(zhí)行其回調(diào)函數(shù),表示對修改結(jié)果的反饋。
一、node.js對于mongodb的基本操作
首先我們要先對數(shù)據(jù)庫進行開機的操作,建立一個文件夾用于存放數(shù)據(jù)庫文檔。如D:mongo,接下去在cmd當中鍵入命令-> mongod --dbpath D:mongo來實現(xiàn)數(shù)據(jù)庫的開機。如下圖所示:
接下去就保持這個cmd控制面板處于這種狀態(tài),以確保數(shù)據(jù)庫處于開機狀態(tài)。
在node.js當中操作mongodb數(shù)據(jù)庫需要引入第三方模塊包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("數(shù)據(jù)庫連接失??!"); return; }; console.log(db); });
我們先定義一個dburl變量用于指定本機上27017端口號(mongodb的默認端口號)上的數(shù)據(jù)庫地址。test為自定義的數(shù)據(jù)庫的名字。若該數(shù)據(jù)庫不存在則會自動完成該數(shù)據(jù)庫的新建。接下去完成與本機上test數(shù)據(jù)庫的連接,這是一個異步函數(shù),當連接完成之后,觸發(fā)執(zhí)行其回調(diào)函數(shù),參數(shù)db指代這個數(shù)據(jù)庫本身。接下去對數(shù)據(jù)庫的增刪改查操作都寫在連接的回調(diào)函數(shù)當中。
數(shù)據(jù)插入操作,指的是對數(shù)據(jù)庫的某個指定集合進行文檔對象的插入。同樣是在完成數(shù)據(jù)庫連接的回調(diào)函數(shù)當中對db這個對象進行操作。示例代碼如下所示:
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ù)庫連接失??!"); return; }; db.collection("student").insertOne({"name":"qianqian"},(err,result)=>{ if(err){ console.log("數(shù)據(jù)插入失??!"); db.close(); return; }; console.log(result); db.close(); }); });
在用node命令運行該文件之后,這時候我們可以在控制臺或在可視化工具當中查看插入結(jié)果。
在db對象的collection方法當中寫入集合的名字,若該集合不存在則自動完成新建,使用方法insertOne()來完成一條文檔的插入,第一個參數(shù)為一個json對象,即插入的那一條文檔數(shù)據(jù)。當完成插入操作之后觸發(fā)執(zhí)行其回調(diào)函數(shù),result表示對插入結(jié)果的反饋。由于數(shù)據(jù)庫不能進行長連接,我們一般都在完成數(shù)據(jù)庫操作的回調(diào)函數(shù)的最后加上db.close();來關(guān)閉數(shù)據(jù)庫。下一次數(shù)據(jù)庫操作時需要重新連接數(shù)據(jù)庫。
數(shù)據(jù)刪除操作,指的是對數(shù)據(jù)庫的某個指定集合當中匹配上篩選條件的文檔進行刪除。同樣是在完成數(shù)據(jù)庫連接的回調(diào)函數(shù)當中對db這個對象進行操作。示例代碼如下所示:
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ù)庫連接失??!"); return; }; db.collection("student").deleteMany({"name":"qianqian"},(err,result)=>{ if(err){ console.log("數(shù)據(jù)刪除失??!"); db.close(); return; }; console.log(result); db.close(); }); });
使用方法deleteMany()來對該集合當中所有符合篩選條件的文檔全部進行刪除,第一個參數(shù)為一個json對象,即篩選條件。當完成刪除操作之后觸發(fā)執(zhí)行其回調(diào)函數(shù),result表示對刪除結(jié)果的反饋。
數(shù)據(jù)修改操作,指的是對數(shù)據(jù)庫的某個指定集合當中匹配上篩選條件的所有文檔進行修改。同樣是在完成數(shù)據(jù)庫連接的回調(diào)函數(shù)當中對db這個對象進行操作。示例代碼如下所示:
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ù)庫連接失?。?); 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()來對該集合當中所有符合篩選條件的文檔全部進行修改,第一個參數(shù)為一個json對象,即篩選條件。第二個參數(shù)為一個json對象,即修改條件,語法如上所示。當沒有寫$set這個關(guān)鍵字,即{"age":18}代表把匹配上的文檔進行替換。當完成修改操作之后觸發(fā)執(zhí)行其回調(diào)函數(shù),result表示對修改結(jié)果的反饋。
數(shù)據(jù)查找操作,指的是對數(shù)據(jù)庫的某個指定集合當中匹配上篩選條件的所有文檔進行查找。同樣是在完成數(shù)據(jù)庫連接的回調(diào)函數(shù)當中對db這個對象進行操作。示例代碼如下所示:
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ù)庫連接失??!"); 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()來對該集合當中所有符合篩選條件的文檔全部進行查找,第一個參數(shù)為一個json對象,即篩選條件。先定義一個空數(shù)組,用于存放符合條件的文檔對象,當完成查找操作之后觸發(fā)執(zhí)行其回調(diào)函數(shù),這里的result表示符合條件的文檔對象的數(shù)組。
我們在find()方法后面繼續(xù)加上sort()方法可以實現(xiàn)對查找的文檔對象的排序操作,參數(shù)同樣是一個json對象。此外mongodb模塊還提供了兩個函數(shù)limit()表示限制讀取的條數(shù),skip()表示略過的條數(shù)。其參數(shù)均為number類型。如把上述代碼修改為: var cursor = db.collection("student").find({"name":"qianqian"}).sort({"age":-1}).skip(0).limit(2);查找結(jié)果為:
同樣是在完成數(shù)據(jù)庫連接的回調(diào)函數(shù)當中對db這個對象進行操作。示例代碼如下所示:
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ù)庫連接失敗!"); return; }; db.collection("student").count({}).then(function(count){ console.log(count); db.close(); }); });
在回調(diào)函數(shù)當中的count即代表數(shù)據(jù)庫的student這個集合當中數(shù)據(jù)文檔的數(shù)目。
二、node.js操作mongodb的常用函數(shù)的封裝我們根據(jù) node.js當中模塊化開發(fā)的基本流程 寫一個db.js模塊,在該模塊當中封裝對數(shù)據(jù)庫的一些基本操作函數(shù)。其中db.js的示例代碼如下所示:
const MongoClient = require("mongodb").MongoClient; var dburl = "mongodb://127.0.0.1:27017/test"; //連接數(shù)據(jù)庫操作 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ù)庫連接失??!"); 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ù)庫連接失??!"); 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ù)庫連接失??!"); return; }; db.collection(collection).updateMany(json1,json2,(err,result)=>{ callback(err,result); db.close(); }); }); }; //獲取集合當中文檔的總條數(shù) module.exports.getAllCount = function(collection,callback){ _connectDB(function(err,db){ if(err){ console.log("數(shù)據(jù)庫連接失??!"); 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ù)個數(shù)不正確!"); return; } var result = []; _connectDB(function(err,db){ if(err){ console.log("數(shù)據(jù)庫連接失?。?); 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數(shù)據(jù)庫進行開機操作,然后在項目文件夾下下載mongodb這個第三方模塊包,然后修改db.js當中的dburl的值,接下去只要在我們自己的主文件用require的方式進行引入即可。如主文件1.js與db.js處于同一目錄下,則在1.js當中使用const db = require("./db.js");對該模塊進行引入即可。下面給出主文件的示例代碼,作為該模塊的使用示范:
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ù)當中的pageamount表示每頁顯示的文檔對象的條數(shù),page表示顯示第幾頁的內(nèi)容(從第0頁開始計數(shù))。以此來實現(xiàn)對查找數(shù)據(jù)分頁顯示的功能。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/19129.html
摘要:使用操作是基于開發(fā)的驅(qū)動,可以在異步的環(huán)境下執(zhí)行。比如,啟動,直接在終端輸入就可以啟動啦默認運行在。還可以自定義端口或者輸入的使用首先新建一個名為的文件夾,該文件夾就是數(shù)據(jù)庫目錄。 使用Mongoose操作MongoDB Mongoose是基于node-mongodb-native開發(fā)的MongoDB nodejs驅(qū)動,可以在異步的環(huán)境下執(zhí)行。 關(guān)于在Mac下安裝和使用MongoDB...
摘要:使用內(nèi)在模塊發(fā)送響應(yīng)數(shù)據(jù)監(jiān)聽端口終端打印如下信息使用框架本項目使用的框架來起服務(wù)器。數(shù)據(jù)庫中文檔每一行的數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)和基本一樣,所有存儲在集合中的數(shù)據(jù)都是格式,是一種類的一種二進制形式的存儲格式,簡稱。 前言 經(jīng)過上一篇經(jīng)濟基礎(chǔ)構(gòu)建的完成,那么現(xiàn)在正式開始碼代碼吧! 項目架構(gòu) showImg(https://segmentfault.com/img/bVNkQM?w=322&h=58...
摘要:使用內(nèi)在模塊發(fā)送響應(yīng)數(shù)據(jù)監(jiān)聽端口終端打印如下信息使用框架本項目使用的框架來起服務(wù)器。數(shù)據(jù)庫中文檔每一行的數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)和基本一樣,所有存儲在集合中的數(shù)據(jù)都是格式,是一種類的一種二進制形式的存儲格式,簡稱。 前言 經(jīng)過上一篇經(jīng)濟基礎(chǔ)構(gòu)建的完成,那么現(xiàn)在正式開始碼代碼吧! 項目架構(gòu) showImg(https://segmentfault.com/img/bVNkQM?w=322&h=58...
摘要:如圖連接成功后,顯示你的數(shù)據(jù)庫,在這個節(jié)目可以對數(shù)據(jù)庫進行操作。如圖安裝與加載首先假定你已經(jīng)安裝了,命令行工具輸入在使用的文件中即可。創(chuàng)建讀取更新刪除單值讀取上文是在中基于對進行增刪查改操作的簡單介紹,以后會有進階的文章。 關(guān)鍵詞:mongodb安裝 mongoose使用 robomongo mongoose的CRUD操作 mongoose的查詢,增加,修改,刪除 工具介紹 Mon...
摘要:如圖連接成功后,顯示你的數(shù)據(jù)庫,在這個節(jié)目可以對數(shù)據(jù)庫進行操作。如圖安裝與加載首先假定你已經(jīng)安裝了,命令行工具輸入在使用的文件中即可。創(chuàng)建讀取更新刪除單值讀取上文是在中基于對進行增刪查改操作的簡單介紹,以后會有進階的文章。 關(guān)鍵詞:mongodb安裝 mongoose使用 robomongo mongoose的CRUD操作 mongoose的查詢,增加,修改,刪除 工具介紹 Mon...
閱讀 3483·2019-08-30 13:15
閱讀 1423·2019-08-29 18:34
閱讀 853·2019-08-29 15:18
閱讀 3505·2019-08-29 11:21
閱讀 3281·2019-08-29 10:55
閱讀 3730·2019-08-26 10:36
閱讀 1896·2019-08-23 18:37
閱讀 1854·2019-08-23 16:57