Mongoose其實就是一套把MongoDB再包裝使用的一套工具,不過因為我是直接碰Mongoose,所以也沒辦法說明比MongoDB好的地方,能力不足的地方只能請各位見諒了,以下把自己讀官方文件的筆記彙整出來,希望能幫到需要的人。

一. 行前準備

  1. 安裝Node.js
  2. 安裝MongoDB(測試時還是要啟動本地端資料庫)
  3. 安裝Mongoose:npm install mongoose

如果有package.json記得要npm install mongoose --save喔!

二. 連接MongoDB

1. 匯入Mongoose檔

var mongoose = require("mongoose");

2. 連接MongoDB伺服器

本地端測試的話直接使用:

var db = mongoose.connect("mongodb://localhost/test");

如果非本地端請自行修改格式:文件

mongodb://<username>:<password>@<host1>:<port1>/<dbName>

3. 綁定事件

首先記得綁一下error事件,除錯是很重要的!

db.on('error', console.error.bind(console, 'connection error:'));

接著是順利連線到伺服器,開始執行callback

db.once(‘open’, function(){
    //接下來的code都寫在這裡面
});

三. 建立Schema

如果有用過MySQL,有點類似把有哪些欄位、這些欄位是什麼格式先定義好,我自己是這樣理解的啦XD

Schema文件

SchemaTypes文件

var kittySchema = mongoose.Schema({
    name: String,
    age: Number
});

為Schema增加Method

特別的地方是,每個Schema還可以新增method,這樣之後編譯的Model就包含該method可用。

var kittySchema.methods.speak = function(){
    var greeting = this.name
        ? "Meow, my name is" + this.name //如果名字有賦值
        :  "I don't have a name"; //如果名字沒賦值
    console.log(greeting); //log出greeting
};

之後建立好Document就可以呼叫speak();囉,之後會再出現。

四. 編譯成Model

定義好一個Schema之後,還要將其編譯成一個Model,才能夠拿來生成Document,可能有點陌生,我個人的理解是,Schema是Model的原型架構,而Model就是被編譯出來的Class,而Document則是Object。

MySQL的Row概念上也類似MongoDB的Document,Table則類似Collection。

var Kitten = mongoose.model('Kitten', kittySchema); //Kitten類別

五. 建立Document

最後就是建立Document了!

var yummy = new Kitten({name: "yummy", age: 3}); //yummy物件

六. 存入Database內

yummy.save(function(err, yummy){
    if(err)
        return console.log(err);
    yummy.speak(); //"Meow, my name is yummy"
});

七. 尋找資料

存資料進去之後也要能取資料出來

取出全部的Document

Kitten.find(function(err, kittens){ //kittens是取出來的資料
    if(err)
        return console.log(err);
    console.log(kittens);
});

篩選過後再取出資料

Kitten.find({name: /^yumm/}, callback); //正規表示式