Mongoose庫簡而言之就是在node環境中操作MongoDB數據庫的一種便捷的封裝,一種對象模型工具,類似ORM,Mongoose將數據庫中的數據轉換為JavaScript對象以供你在應用中使用。
當然要使用的話,必須要先安裝好環境Node.js與MongoDB =》 MongoDB安裝
MongoDB是目前最流行的noSQL數據庫之一,它是專為node.js而開發的,理解下與我們常用的RDBMS關系型數據庫的區別就可以基本使用了
MongoDB中有三個基本的概念區別於RDBMS
- 數據庫:數據庫是一個物理容器集合。每個數據庫都有自己的一套文件系統上的文件。一個單一的MongoDB服務器通常有多個數據庫。
- 集合:集合是一組MongoDB的文檔。它相當於一個RDBMS表。收集存在於一個單一的數據庫。集合不執行模式。集合內的文檔可以有不同的領域。通常情況下,一個集合中的所有文件是相同或相關的目的
- 文檔:文檔是一組鍵 - 值對。文件動態模式。動態模式是指,在相同集合中的文檔不需要具有相同的字段或結構組的公共字段的集合的文檔,可以容納不同類型的數據。
下面給出的表顯示RDBMS術語使用 MongoDB 的關系
觀察下最重要的一點就是我們關系數據庫中的表與字段被合集與文檔的概念給替代了,Mongo不在具有主鍵的關系了,數據保存都是放在文檔中用JSON風格鍵值對風格的文件形式存放
詳細了解可以異步 MongoDB資料匯總專題
Mongoose中的操作流程
1. 連接數據庫
var mongoose = require("mongoose"); // 連接字符串格式為mongodb://主機/數據庫名 mongoose.connect('mongodb://localhost/test');
這里沒太多好解釋的,安裝mongoose后,引入模塊連接到本地的mongodb的test表,這里要注意了,mongo數據庫是運行狀態
2. 存儲數據
var Schema = mongoose.Schema; //骨架模版 var movieSchema = new Schema({ doctor : String, title : String, language : String, country : String, year : Number, summary : String, poster : String, flash : String }) //模型 var Movie = mongoose.model('Movie', movieSchema); //存儲數據 var moive = new Movie({ title: '黑衣人三', doctor: '史密斯', year: 2018, flash: 'http://player.youku.com/player.php/sid/XNjA1Njc0NTUy/v.swf', country: '美國', language: '英語', summary: '好片' }) //保存數據庫 moive.save(function(err) { if (err) { console.log('保存失敗') return; } console.log('meow'); });
以上是最簡單的數據操作了
流程就是:通過Schema創建一個模式movieSchema ,通過模式movieSchema創建一個模型Movie,通過模型Movie寫入數據,通過save方法保存
定義schema->創建model->實例化方法
表 –》 合集 –》 文檔
這里涉及幾個名詞概念Schema與Model
3.Schema與
Model
- Schema : 一種以文件形式存儲的數據庫模型骨架,不具備數據庫的操作能力
- Model : 由Schema發布生成的模型,具有抽象屬性和行為的數據庫操作對
雖然模式(Schema)在MongoDB的存儲中並不是必須的,但是一般來說為了文檔的整齊一致我們在Mongoose中還是會用到模式。可以說,Mongoose中的一切都從定義模式開
不像傳統的關系型數據庫一樣,比如mysql,連接好數據后直接有把sql語句丟到一個指定的方法中就執行了,這里會有Schema的抽象概念
Schema它類似於關系數據庫的表結構,可以理解為數據庫模型骨架
Schema可以看作工廠中模具一樣,好比一個茶杯,喝水是茶杯最終的功能,茶杯本身就像是Model,那么茶杯的批量生產是需要靠工廠的模具成型的,這就像是Schema了
Schema不僅定義了文檔結構和使用性能,還可以有擴展插件、實例方法、靜態方法、復合索引、文檔生命周期鈎子
4. CURD操作
Model可以看到關系型數據庫中的表,那么通過new Model出來的實例document文檔對應的則是關系數據庫中表的一行記錄
document有許多內置的實例方法. 可以直接執行增刪改查操作
增加數據
//模型
var Movie = mongoose.model('Movie', movieSchema);
var moive = new Movie({ title: '黑衣人三', doctor: '史密斯', year: 2018, flash: 'http://player.youku.com/player.php/sid/XNjA1Njc0NTUy/v.swf', country: '美國', language: '英語', summary: '好片' }) //保存數據庫 moive.save(function(err) { if (err) { console.log('保存失敗') return; } console.log('meow'); });
在這里我們通過對模型Movie實例化生成了一個叫moive的文檔,並使用save方法將它存儲到了集合
修改數據
User.update({_id: oneUser._id}, { $set: {name: oneUser.name,password:oneUser.password} }, function(err) { if(err){ console.log(err) return } console.log('更新成功') });
更新的數據比較少用$set,可用性還是很好
刪除數據
User.remove({ _id: id }, function(err) { if (err) { console.log(err) return } console.log('刪除成功') });
簡單的數據庫的連接,跑通了整個流程,具體的可以查看API
Mongoose API : http://mongoosejs.com/docs/api.html
附上git上mongoose的一個簡單的測試案例
https://github.com/JsAaron/node_movie/tree/master/data
支持增加、修改、刪除數據
win平台安裝:
1. 首先要安裝好MongoDB安裝
2. 進入目錄,通過npm install 安裝模塊依賴、grunt、mongoose、express、jade
3. 執行命令grunt,自動檢測文件改動重啟服務
4. 打開http://localhost:3000/即可