首先咱們要先對數據庫進行開機的操做,創建一個文件夾用於存放數據庫文檔。如D:\mongo
,接下去在cmd
當中鍵入命令-> mongod --dbpath D:\mongo
來實現數據庫的開機。以下圖所示:node
接下去就保持這個cmd
控制面板處於這種狀態,以確保數據庫處於開機狀態。mongodb
在node.js
當中操做mongodb
數據庫須要引入第三方模塊包mongodb
。因此咱們先在項目文件夾下鍵入命令-> npm install mongodb
來完成下載包。接下去再用const MongoClient = require('mongodb').MongoClient;
來完成引包。示例代碼以下所示:typescript
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
這個對象進行操做。示例代碼以下所示:npm
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
命令運行該文件以後,這時候咱們能夠在控制檯或在可視化工具當中查看插入結果。json
在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
來對該集合當中全部符合篩選條件的文檔所有進行查找,第一個參數爲一個對象,即篩選條件。先定義一個空數組,用於存放符合條件的文檔對象,當完成查找操做以後觸發執行其回調函數,這裏的表示符合條件的文檔對象的數組。()jsonresult
咱們在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
這個集合當中數據文檔的數目。
咱們寫一個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
頁開始計數)。以此來實現對查找數據分頁顯示的功能。