Mongoose庫簡而言之就是在node環境中操作MongoDB數據庫的一種便捷的封裝,一種對象模型工具,類似ORM,Mongoose將數據庫中的數據轉換爲JavaScript對象以供你在應用中使用。
當然要使用的話,必須要先安裝好環境Node.js與MongoDB =》 MongoDB安裝
MongoDB是目前最流行的noSQL數據庫之一,它是專爲node.js而開發的,理解下與我們常用的RDBMS關係型數據庫的區別就可以基本使用了
MongoDB中有三個基本的概念區別於RDBMS
數據庫:數據庫是一個物理容器集合。每個數據庫都有自己的一套文件系統上的文件。一個單一的MongoDB服務器通常有多個數據庫。
集合:集合是一組MongoDB的文檔。它相當於一個RDBMS表。收集存在於一個單一的數據庫。集合不執行模式。集合內的文檔可以有不同的領域。通常情況下,一個集合中的所有文件是相同或相關的目的
文檔:文檔是一組鍵 - 值對。文件動態模式。動態模式是指,在相同集合中的文檔不需要具有相同的字段或結構組的公共字段的集合的文檔,可以容納不同類型的數據。
下面給出的表顯示RDBMS術語使用 MongoDB 的關係
觀察下最重要的一點就是我們關係數據庫中的表與字段被合集與文檔的概念給替代了,Mongo不在具有主鍵的關係了,數據保存都是放在文檔中用JSON風格鍵值對風格的文件形式存放
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不僅定義了文檔結構和使用性能,還可以有擴展插件、實例方法、靜態方法、複合索引、文檔生命週期鉤子
- 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('刪除成功')
});