首頁 >web前端 >js教程 >詳解Wondows下Node.js使用MongoDB的環境配置_node.js

詳解Wondows下Node.js使用MongoDB的環境配置_node.js

WBOY
WBOY原創
2016-05-16 15:12:451570瀏覽

為了保存網站的使用者資料和業務數據,通常需要一個資料庫。 MongoDB和Node.js特別般配,因為MongoDB是基於文件的非關係型資料庫,文件是按BSON(JSON的輕量化二進位格式)儲存的,增刪改查等管理資料庫的指令和JavaScript語法很像。如果你在Node.js裡存取MongoDB的數據,會有我們是一家人的感覺,特別親切。

我也準備好使用MongoDB來作為我的資料庫。

MongoDB使用集合(collection)和文件(document)來描述和儲存數據,collection相當於表,document相當於行,不過MySQL之類的關係型資料庫,表結構是固定的,例如某一行由若干列組成,行行都一樣,而MongoDB不同,一個集合裡的多個文件可以有不同的結構,更靈活一些。

安裝Mongo

詳細指南在這裡(MongoDB的官方文件):https://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/。

到https://www.mongodb.org/downloads下載安裝包,Windows系統是msi文件,我選擇的是「Windows 64-bit 2008 R2+」這個版本。

安裝非常簡單,你可以默認,也可以選擇安裝位置,我裝到了G碟MongoDB目錄下。安裝完後,目錄結構是這樣的:G:MongoDBServer3.0。

mongod、mongo以及其它的工具,都在3.0目錄下的bin目錄。

啟動

要使用MongoDB,需要指定一個資料夾讓它存放數據,我在G:MongoDB下建立了一個名為db的資料夾。

開啟cmd,進入G:MongoDBServer3.0bin目錄,執行“mongod –dbpath=G:MongoDBdb”,就會啟動MongoDB,看到下面的圖:

201631161833532.jpg (672×436)

MongoDB啟動後,會監聽在一個連接埠上等待客戶端來連接,從上圖可以看出,預設監聽的連接埠是27017。你可以「–port」選項改變這個端口,例如「mongod –port 28018 –dbpath=G:MongoDBdb」指令就會啟動MongoDB並監聽28018埠。

啟動了MongoDB,我們就可以使用mongo(互動式shell)來管理資料庫了。直接在bin目錄下執行mongo,就可以看到下圖:

201631161901110.jpg (672×333)

mongo Shell預設連接到了test資料庫,也告訴我們可以輸入help來查看幫助。你可以鍵入help並回車,看看都有哪些指令可用。

注意,mongod預設啟動時不帶鑑權,客戶端連上後就可以隨便操作,建庫、增刪改查等統統可以。你要限制使用者權限,可以自己設定下,我這裡就直接往下走了。

安裝mongoose驅動

安裝GIT工具:
由於github網站不支援直接下載打包了所有submodule的源碼包,所以需要透過git工具來簽出所有的原始碼。從http://code.google.com/p/msysgit/downloads/list,可以下載到msysgit這個Windows平台下的git客戶端工具(最新版本檔案為Git-1.7.7.1-preview20111027.exe)。下載之後雙擊安裝。

下載NPM原始碼:
開啟命令列工具(CMD),執行以下命令,可以透過msysgit簽出NPM的所有原始碼和依賴程式碼並安裝npm。

git clone --recursive git://github.com/isaacs/npm.git
cd npm
node cli.js install npm -gf

在執行這段程式碼之前,請確保node.exe是跟著透過node.msi的方式安裝的,或是在PATH環境變數中。這段指令也會將npm加入PATH環境變數去,之後可以隨處執行npm指令。如果安裝中遇到權限方面的錯誤,請確保cmd命令列工具是透過管理員身分執行的。安裝成功後,執行以下指令:

npm install underscore

回傳:

underscore@1.2.2 ./node_modules/underscore

如此,Windows平台下的NPM安裝完畢,然後我們可以安裝mongoose

npm install mongoose 

實例
一些基礎的操作,說明都寫在程式碼註解裡了:

// 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 结构
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 静态方法,静态方法在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!');
  }
  // 关闭数据库链接
  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');
  }
  // 关闭数据库链接
  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!');
  }
  //关闭数据库链接
  db.close();
});
// 查询
// 基于实例方法的查询
var mongooseEntity = new mongooseModel({});
mongooseEntity.findbyusername('model_demo_username', function(error, result){
  if(error) {
    console.log(error);
  } else {
    console.log(result);
  }
  //关闭数据库链接
  db.close();
});
// 基于静态方法的查询
mongooseModel.findbytitle('emtity_demo_title', function(error, result){
  if(error) {
    console.log(error);
  } else {
    console.log(result);
  }
  //关闭数据库链接
  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);
  }
  //关闭数据库链接
  db.close();
});
// 删除记录
var conditions = {username: 'emtity_demo_username'};
mongooseModel.remove(conditions, function(error){
  if(error) {
    console.log(error);
  } else {
    console.log('delete ok!');
  }

  //关闭数据库链接
  db.close();
});

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn