詳解Wondows下Node.js使用MongoDB的環(huán)境配置
為了保存網(wǎng)站的用戶數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù),通常需要一個數(shù)據(jù)庫。MongoDB和Node.js特別般配,因為MongoDB是基于文檔的非關(guān)系型數(shù)據(jù)庫,文檔是按BSON(JSON的輕量化二進制格式)存儲的,增刪改查等管理數(shù)據(jù)庫的命令和JavaScript語法很像。如果你在Node.js里訪問MongoDB的數(shù)據(jù),會有我們是一家人的感覺,特別親切。
我也準備使用MongoDB來作為我的數(shù)據(jù)庫。
MongoDB使用集合(collection)和文檔(document)來描述和存儲數(shù)據(jù),collection就相當于表,document相當于行,不過MySQL之類的關(guān)系型數(shù)據(jù)庫,表結(jié)構(gòu)是固定的,比如某一行由若干列組成,行行都一樣,而MongoDB不同,一個集合里的多個文檔可以有不同的結(jié)構(gòu),更靈活一些。
安裝Mongo
詳細指南在這里(MongoDB的官方文檔):https://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/。
到https://www.mongodb.org/downloads下載安裝包,Windows系統(tǒng)是msi文件,我選擇的是“Windows 64-bit 2008 R2+”這個版本。
安裝非常簡單,你可以默認,也可以選擇安裝位置,我裝到了G盤MongoDB目錄下。安裝完后,目錄結(jié)構(gòu)是這樣的:G:\MongoDB\Server\3.0\。
mongod、mongo以及其它的工具,都在3.0目錄下的bin目錄。
啟動
要使用MongoDB,需要指定一個文件夾讓它存放數(shù)據(jù),我在G:\MongoDB下建立了一個名為db的文件夾。
打開cmd,進入G:\MongoDB\Server\3.0\bin目錄,執(zhí)行“mongod –dbpath=G:\MongoDB\db”,就會啟動MongoDB,看到下面的圖:
MongoDB啟動后,會監(jiān)聽在一個端口上等待客戶端來連接,從上圖可以看出,默認監(jiān)聽的端口是27017。你可以“–port”選項改變這個端口,比如“mongod –port 28018 –dbpath=G:\MongoDB\db”命令就會啟動MongoDB并監(jiān)聽28018端口。
啟動了MongoDB,我們就可以使用mongo(交互式shell)來管理數(shù)據(jù)庫了。直接在bin目錄下執(zhí)行mongo,就可以看到下圖:
mongo Shell默認連接到了test數(shù)據(jù)庫,還告訴我們可以輸入help來查看幫助。你可以鍵入help并回車,看看都有哪些命令可用。
注意,mongod默認啟動時不帶鑒權(quán),客戶端連上后就可以隨便操作,建庫、增刪改查等統(tǒng)統(tǒng)可以。你要想限制用戶權(quán)限,可以自己配置下,我這里就直接往下走了。
安裝mongoose驅(qū)動
安裝GIT工具:
由于github網(wǎng)站不支持直接下載打包了所有submodule的源碼包,所以需要通過git工具來簽出所有的源碼。從http://code.google.com/p/msysgit/downloads/list,可以下載到msysgit這個Windows平臺下的git客戶端工具(最新版本文件為Git-1.7.7.1-preview20111027.exe)。在下載之后雙擊安裝。
下載NPM源碼:
打開命令行工具(CMD),執(zhí)行以下命令,可以通過msysgit簽出NPM的所有源碼和依賴代碼并安裝npm。
git clone --recursive git://github.com/isaacs/npm.git cd npm node cli.js install npm -gf
在執(zhí)行這段代碼之前,請確保node.exe是跟通過node.msi的方式安裝的,或者在PATH環(huán)境變量中。這段命令也會將npm加入到PATH環(huán)境變量中去,之后可以隨處執(zhí)行npm命令。如果安裝中遇到權(quán)限方面的錯誤,請確保cmd命令行工具是通過管理員身份運行的。安裝成功后,執(zhí)行以下命令:
npm install underscore
返回:
underscore@1.2.2 ./node_modules/underscore
如此,Windows平臺下的NPM安裝完畢,然后我們可以安裝mongoose
npm install mongoose
實例
一些基礎(chǔ)的操作,說明都寫在代碼注釋里了:
// mongoose 鏈接 var mongoose = require('mongoose'); var db = mongoose.createConnection('mongodb://127.0.0.1:27017/NodeJS'); // 鏈接錯誤 db.on('error', function(error) { console.log(error); }); // Schema 結(jié)構(gòu) var mongooseSchema = new mongoose.Schema({ username : {type : String, default : '匿名用戶'}, title : {type : String}, content : {type : String}, time : {type : Date, default: Date.now}, age : {type : Number} }); // 添加 mongoose 實例方法 mongooseSchema.methods.findbyusername = function(username, callback) { return this.model('mongoose').find({username: username}, callback); } // 添加 mongoose 靜態(tài)方法,靜態(tài)方法在Model層就能使用 mongooseSchema.statics.findbytitle = function(title, callback) { return this.model('mongoose').find({title: title}, callback); } // model var mongooseModel = db.model('mongoose', mongooseSchema); // 增加記錄 基于 entity 操作 var doc = {username : 'emtity_demo_username', title : 'emtity_demo_title', content : 'emtity_demo_content'}; var mongooseEntity = new mongooseModel(doc); mongooseEntity.save(function(error) { if(error) { console.log(error); } else { console.log('saved OK!'); } // 關(guān)閉數(shù)據(jù)庫鏈接 db.close(); }); // 增加記錄 基于model操作 var doc = {username : 'model_demo_username', title : 'model_demo_title', content : 'model_demo_content'}; mongooseModel.create(doc, function(error){ if(error) { console.log(error); } else { console.log('save ok'); } // 關(guān)閉數(shù)據(jù)庫鏈接 db.close(); }); // 修改記錄 mongooseModel.update(conditions, update, options, callback); var conditions = {username : 'model_demo_username'}; var update = {$set : {age : 27, title : 'model_demo_title_update'}}; var options = {upsert : true}; mongooseModel.update(conditions, update, options, function(error){ if(error) { console.log(error); } else { console.log('update ok!'); } //關(guān)閉數(shù)據(jù)庫鏈接 db.close(); }); // 查詢 // 基于實例方法的查詢 var mongooseEntity = new mongooseModel({}); mongooseEntity.findbyusername('model_demo_username', function(error, result){ if(error) { console.log(error); } else { console.log(result); } //關(guān)閉數(shù)據(jù)庫鏈接 db.close(); }); // 基于靜態(tài)方法的查詢 mongooseModel.findbytitle('emtity_demo_title', function(error, result){ if(error) { console.log(error); } else { console.log(result); } //關(guān)閉數(shù)據(jù)庫鏈接 db.close(); }); // mongoose find var criteria = {title : 'emtity_demo_title'}; // 查詢條件 var fields = {title : 1, content : 1, time : 1}; // 待返回的字段 var options = {}; mongooseModel.find(criteria, fields, options, function(error, result){ if(error) { console.log(error); } else { console.log(result); } //關(guān)閉數(shù)據(jù)庫鏈接 db.close(); }); // 刪除記錄 var conditions = {username: 'emtity_demo_username'}; mongooseModel.remove(conditions, function(error){ if(error) { console.log(error); } else { console.log('delete ok!'); } //關(guān)閉數(shù)據(jù)庫鏈接 db.close(); });
- node.js操作mongoDB數(shù)據(jù)庫示例分享
- node.js連接mongoDB數(shù)據(jù)庫 快速搭建自己的web服務(wù)
- Node.js對MongoDB數(shù)據(jù)庫實現(xiàn)模糊查詢的方法
- 了不起的node.js讀書筆記之mongodb數(shù)據(jù)庫交互
- node.js連接MongoDB數(shù)據(jù)庫的2種方法教程
- Node.js連接MongoDB數(shù)據(jù)庫產(chǎn)生的問題
- Node.js中使用mongoose操作mongodb數(shù)據(jù)庫的方法
- 利用Vue.js+Node.js+MongoDB實現(xiàn)一個博客系統(tǒng)(附源碼)
- 利用node.js+mongodb如何搭建一個簡單登錄注冊的功能詳解
- Node.js操作MongoDB數(shù)據(jù)庫實例分析
相關(guān)文章
Node.js實戰(zhàn)之Buffer和Stream模塊系統(tǒng)深入剖析詳解
這篇文章主要介紹了Node.js實戰(zhàn)之Buffer和Stream模塊系統(tǒng)深入剖析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08node命令行工具之實現(xiàn)項目工程自動初始化的標準流程
這篇文章主要介紹了node命令行工具之實現(xiàn)項目工程自動初始化的標準流程 ,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08NodeJS多種創(chuàng)建WebSocket監(jiān)聽的方式(三種)
這篇文章主要介紹了NodeJS多種創(chuàng)建WebSocket監(jiān)聽的方式,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06Node.js實現(xiàn)兼容IE789的文件上傳進度條
這篇文章給大家介紹了如何實現(xiàn)兼容IE789的文件上傳進度條,如果你的工作用過上傳圖片或上傳大文件啥的,一般在IE低版本瀏覽器里,會切換到用flash解決,可是有些人肯定不會為了老舊IE的進度條而去學(xué)flash,那么下面來一起看看吧。2016-09-09