欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Wondows下Node.js使用MongoDB的環(huán)境配置

 更新時(shí)間:2016年03月01日 16:34:36   作者:fourlee  
這篇文章主要介紹了詳解Wondows下Node.js使用MongoDB的環(huán)境配置,這里使用到了Mongoose驅(qū)動(dòng)來(lái)讓JavaScript操作MongoDB,需要的朋友可以參考下

為了保存網(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,看到下面的圖:

201631161833532.jpg (672×436)

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,就可以看到下圖:

201631161901110.jpg (672×333)

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();
});

相關(guān)文章

  • Node.js實(shí)戰(zhàn)之Buffer和Stream模塊系統(tǒng)深入剖析詳解

    Node.js實(shí)戰(zhàn)之Buffer和Stream模塊系統(tǒng)深入剖析詳解

    這篇文章主要介紹了Node.js實(shí)戰(zhàn)之Buffer和Stream模塊系統(tǒng)深入剖析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 如何使用puppet替換文件中的string

    如何使用puppet替換文件中的string

    今天小編就為大家分享一篇關(guān)于如何使用puppet替換文件中的string,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • Node server生成Swagger接口文檔步驟詳解

    Node server生成Swagger接口文檔步驟詳解

    本文介紹使用NodeJs搭建的后端server快速生成Swagger接口文檔的技巧,本文有詳細(xì)的步驟講解,通過(guò)代碼示例給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-01-01
  • 解決修復(fù)npm安裝全局模塊權(quán)限的問(wèn)題

    解決修復(fù)npm安裝全局模塊權(quán)限的問(wèn)題

    今天小編就為大家分享一篇解決修復(fù)npm安裝全局模塊權(quán)限的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • NodeJS模塊Buffer原理及使用方法解析

    NodeJS模塊Buffer原理及使用方法解析

    這篇文章主要介紹了NodeJS模塊Buffer原理及使用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • node.js中的fs.truncate方法使用說(shuō)明

    node.js中的fs.truncate方法使用說(shuō)明

    這篇文章主要介紹了node.js中的fs.truncate方法使用說(shuō)明,本文介紹了fs.truncate的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node命令行工具之實(shí)現(xiàn)項(xiàng)目工程自動(dòng)初始化的標(biāo)準(zhǔn)流程

    node命令行工具之實(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-08
  • NodeJS多種創(chuàng)建WebSocket監(jiān)聽的方式(三種)

    NodeJS多種創(chuàng)建WebSocket監(jiān)聽的方式(三種)

    這篇文章主要介紹了NodeJS多種創(chuàng)建WebSocket監(jiān)聽的方式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • node版本快速切換及管理方法

    node版本快速切換及管理方法

    這篇文章主要為大家介紹了node版本快速切換及管理方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Node.js實(shí)現(xiàn)兼容IE789的文件上傳進(jìn)度條

    Node.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

最新評(píng)論