1. 程式人生 > >讓node.js高效操作mongodb

讓node.js高效操作mongodb

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不僅定義了文件結構和使用效能,還可以有擴充套件外掛、例項方法、靜態方法、複合索引、文件生命週期鉤子

  1. 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('刪除成功')
});