詳解Wondows下Node.js使用MongoDB的環(huán)境配置
為了保存網(wǎng)站的用戶數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù),通常需要一個(gè)數(shù)據(jù)庫(kù)。MongoDB和Node.js特別般配,因?yàn)镸ongoDB是基于文檔的非關(guān)系型數(shù)據(jù)庫(kù),文檔是按BSON(JSON的輕量化二進(jìn)制格式)存儲(chǔ)的,增刪改查等管理數(shù)據(jù)庫(kù)的命令和JavaScript語(yǔ)法很像。如果你在Node.js里訪問(wèn)MongoDB的數(shù)據(jù),會(huì)有我們是一家人的感覺,特別親切。
我也準(zhǔn)備使用MongoDB來(lái)作為我的數(shù)據(jù)庫(kù)。
MongoDB使用集合(collection)和文檔(document)來(lái)描述和存儲(chǔ)數(shù)據(jù),collection就相當(dāng)于表,document相當(dāng)于行,不過(guò)MySQL之類的關(guān)系型數(shù)據(jù)庫(kù),表結(jié)構(gòu)是固定的,比如某一行由若干列組成,行行都一樣,而MongoDB不同,一個(gè)集合里的多個(gè)文檔可以有不同的結(jié)構(gòu),更靈活一些。
安裝Mongo
詳細(xì)指南在這里(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è)版本。
安裝非常簡(jiǎn)單,你可以默認(rèn),也可以選擇安裝位置,我裝到了G盤MongoDB目錄下。安裝完后,目錄結(jié)構(gòu)是這樣的:G:\MongoDB\Server\3.0\。
mongod、mongo以及其它的工具,都在3.0目錄下的bin目錄。
啟動(dòng)
要使用MongoDB,需要指定一個(gè)文件夾讓它存放數(shù)據(jù),我在G:\MongoDB下建立了一個(gè)名為db的文件夾。
打開cmd,進(jìn)入G:\MongoDB\Server\3.0\bin目錄,執(zhí)行“mongod –dbpath=G:\MongoDB\db”,就會(huì)啟動(dòng)MongoDB,看到下面的圖:
MongoDB啟動(dòng)后,會(huì)監(jiān)聽在一個(gè)端口上等待客戶端來(lái)連接,從上圖可以看出,默認(rèn)監(jiān)聽的端口是27017。你可以“–port”選項(xiàng)改變這個(gè)端口,比如“mongod –port 28018 –dbpath=G:\MongoDB\db”命令就會(huì)啟動(dòng)MongoDB并監(jiān)聽28018端口。
啟動(dòng)了MongoDB,我們就可以使用mongo(交互式shell)來(lái)管理數(shù)據(jù)庫(kù)了。直接在bin目錄下執(zhí)行mongo,就可以看到下圖:
mongo Shell默認(rèn)連接到了test數(shù)據(jù)庫(kù),還告訴我們可以輸入help來(lái)查看幫助。你可以鍵入help并回車,看看都有哪些命令可用。
注意,mongod默認(rèn)啟動(dòng)時(shí)不帶鑒權(quán),客戶端連上后就可以隨便操作,建庫(kù)、增刪改查等統(tǒng)統(tǒng)可以。你要想限制用戶權(quán)限,可以自己配置下,我這里就直接往下走了。
安裝mongoose驅(qū)動(dòng)
安裝GIT工具:
由于github網(wǎng)站不支持直接下載打包了所有submodule的源碼包,所以需要通過(guò)git工具來(lái)簽出所有的源碼。從http://code.google.com/p/msysgit/downloads/list,可以下載到msysgit這個(gè)Windows平臺(tái)下的git客戶端工具(最新版本文件為Git-1.7.7.1-preview20111027.exe)。在下載之后雙擊安裝。
下載NPM源碼:
打開命令行工具(CMD),執(zhí)行以下命令,可以通過(guò)msysgit簽出NPM的所有源碼和依賴代碼并安裝npm。
git clone --recursive git://github.com/isaacs/npm.git cd npm node cli.js install npm -gf
在執(zhí)行這段代碼之前,請(qǐng)確保node.exe是跟通過(guò)node.msi的方式安裝的,或者在PATH環(huán)境變量中。這段命令也會(huì)將npm加入到PATH環(huán)境變量中去,之后可以隨處執(zhí)行npm命令。如果安裝中遇到權(quán)限方面的錯(cuò)誤,請(qǐng)確保cmd命令行工具是通過(guò)管理員身份運(yùn)行的。安裝成功后,執(zhí)行以下命令:
npm install underscore
返回:
underscore@1.2.2 ./node_modules/underscore
如此,Windows平臺(tái)下的NPM安裝完畢,然后我們可以安裝mongoose
npm install mongoose
實(shí)例
一些基礎(chǔ)的操作,說(shuō)明都寫在代碼注釋里了:
// mongoose 鏈接 var mongoose = require('mongoose'); var db = mongoose.createConnection('mongodb://127.0.0.1:27017/NodeJS'); // 鏈接錯(cuò)誤 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 實(shí)例方法 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ù)庫(kù)鏈接 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ù)庫(kù)鏈接 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ù)庫(kù)鏈接 db.close(); }); // 查詢 // 基于實(shí)例方法的查詢 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ù)庫(kù)鏈接 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ù)庫(kù)鏈接 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ù)庫(kù)鏈接 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ù)庫(kù)鏈接 db.close(); });
- node.js操作mongoDB數(shù)據(jù)庫(kù)示例分享
- node.js連接mongoDB數(shù)據(jù)庫(kù) 快速搭建自己的web服務(wù)
- Node.js對(duì)MongoDB數(shù)據(jù)庫(kù)實(shí)現(xiàn)模糊查詢的方法
- 了不起的node.js讀書筆記之mongodb數(shù)據(jù)庫(kù)交互
- node.js連接MongoDB數(shù)據(jù)庫(kù)的2種方法教程
- Node.js連接MongoDB數(shù)據(jù)庫(kù)產(chǎn)生的問(wèn)題
- Node.js中使用mongoose操作mongodb數(shù)據(jù)庫(kù)的方法
- 利用Vue.js+Node.js+MongoDB實(shí)現(xiàn)一個(gè)博客系統(tǒng)(附源碼)
- 利用node.js+mongodb如何搭建一個(gè)簡(jiǎn)單登錄注冊(cè)的功能詳解
- Node.js操作MongoDB數(shù)據(jù)庫(kù)實(shí)例分析
相關(guān)文章
Node.js實(shí)戰(zhàn)之Buffer和Stream模塊系統(tǒng)深入剖析詳解
這篇文章主要介紹了Node.js實(shí)戰(zhàn)之Buffer和Stream模塊系統(tǒng)深入剖析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08解決修復(fù)npm安裝全局模塊權(quán)限的問(wèn)題
今天小編就為大家分享一篇解決修復(fù)npm安裝全局模塊權(quán)限的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05node.js中的fs.truncate方法使用說(shuō)明
這篇文章主要介紹了node.js中的fs.truncate方法使用說(shuō)明,本文介紹了fs.truncate的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12node命令行工具之實(shí)現(xiàn)項(xiàng)目工程自動(dòng)初始化的標(biāo)準(zhǔn)流程
這篇文章主要介紹了node命令行工具之實(shí)現(xiàn)項(xiàng)目工程自動(dòng)初始化的標(biāo)準(zhǔn)流程 ,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08NodeJS多種創(chuàng)建WebSocket監(jiān)聽的方式(三種)
這篇文章主要介紹了NodeJS多種創(chuàng)建WebSocket監(jiān)聽的方式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06Node.js實(shí)現(xiàn)兼容IE789的文件上傳進(jìn)度條
這篇文章給大家介紹了如何實(shí)現(xiàn)兼容IE789的文件上傳進(jìn)度條,如果你的工作用過(guò)上傳圖片或上傳大文件啥的,一般在IE低版本瀏覽器里,會(huì)切換到用flash解決,可是有些人肯定不會(huì)為了老舊IE的進(jìn)度條而去學(xué)flash,那么下面來(lái)一起看看吧。2016-09-09