摘要:接下去完成與本機上數據庫的連接,這是一個異步函數,當連接完成之后,觸發執行其回調函數,參數指代這個數據庫本身。同樣是在完成數據庫連接的回調函數當中對這個對象進行操作。當完成修改操作之后觸發執行其回調函數,表示對修改結果的反饋。
一、node.js對于mongodb的基本操作
首先我們要先對數據庫進行開機的操作,建立一個文件夾用于存放數據庫文檔。如D:mongo,接下去在cmd當中鍵入命令-> mongod --dbpath D:mongo來實現數據庫的開機。如下圖所示:
接下去就保持這個cmd控制面板處于這種狀態,以確保數據庫處于開機狀態。
在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指代這個數據庫本身。接下去對數據庫的增刪改查操作都寫在連接的回調函數當中。
數據插入操作,指的是對數據庫的某個指定集合進行文檔對象的插入。同樣是在完成數據庫連接的回調函數當中對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").insertOne({"name":"qianqian"},(err,result)=>{ if(err){ console.log("數據插入失敗!"); db.close(); return; }; console.log(result); db.close(); }); });
在用node命令運行該文件之后,這時候我們可以在控制臺或在可視化工具當中查看插入結果。
在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這個集合當中數據文檔的數目。
二、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.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("數據插入失敗!"); 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頁開始計數)。以此來實現對查找數據分頁顯示的功能。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/19129.html
摘要:使用操作是基于開發的驅動,可以在異步的環境下執行。比如,啟動,直接在終端輸入就可以啟動啦默認運行在。還可以自定義端口或者輸入的使用首先新建一個名為的文件夾,該文件夾就是數據庫目錄。 使用Mongoose操作MongoDB Mongoose是基于node-mongodb-native開發的MongoDB nodejs驅動,可以在異步的環境下執行。 關于在Mac下安裝和使用MongoDB...
摘要:使用內在模塊發送響應數據監聽端口終端打印如下信息使用框架本項目使用的框架來起服務器。數據庫中文檔每一行的數據的數據結構和基本一樣,所有存儲在集合中的數據都是格式,是一種類的一種二進制形式的存儲格式,簡稱。 前言 經過上一篇經濟基礎構建的完成,那么現在正式開始碼代碼吧! 項目架構 showImg(https://segmentfault.com/img/bVNkQM?w=322&h=58...
摘要:使用內在模塊發送響應數據監聽端口終端打印如下信息使用框架本項目使用的框架來起服務器。數據庫中文檔每一行的數據的數據結構和基本一樣,所有存儲在集合中的數據都是格式,是一種類的一種二進制形式的存儲格式,簡稱。 前言 經過上一篇經濟基礎構建的完成,那么現在正式開始碼代碼吧! 項目架構 showImg(https://segmentfault.com/img/bVNkQM?w=322&h=58...
摘要:如圖連接成功后,顯示你的數據庫,在這個節目可以對數據庫進行操作。如圖安裝與加載首先假定你已經安裝了,命令行工具輸入在使用的文件中即可。創建讀取更新刪除單值讀取上文是在中基于對進行增刪查改操作的簡單介紹,以后會有進階的文章。 關鍵詞:mongodb安裝 mongoose使用 robomongo mongoose的CRUD操作 mongoose的查詢,增加,修改,刪除 工具介紹 Mon...
摘要:如圖連接成功后,顯示你的數據庫,在這個節目可以對數據庫進行操作。如圖安裝與加載首先假定你已經安裝了,命令行工具輸入在使用的文件中即可。創建讀取更新刪除單值讀取上文是在中基于對進行增刪查改操作的簡單介紹,以后會有進階的文章。 關鍵詞:mongodb安裝 mongoose使用 robomongo mongoose的CRUD操作 mongoose的查詢,增加,修改,刪除 工具介紹 Mon...
閱讀 3466·2019-08-30 13:15
閱讀 1403·2019-08-29 18:34
閱讀 829·2019-08-29 15:18
閱讀 3488·2019-08-29 11:21
閱讀 3252·2019-08-29 10:55
閱讀 3705·2019-08-26 10:36
閱讀 1874·2019-08-23 18:37
閱讀 1827·2019-08-23 16:57