node.js+MongooseでMongoDBを試してみる – ServersMan@VPS

mongoDB

Mongooseを試してみましたが、mongoDBかなり扱いやすいです。
スキーマレスなドキュメント指向データベースはRDBMSのようなカラムをいちいち定義しなくていいので柔軟にデータベースが使えます。
ドキュメント指向データベースになれるとRDBMSはもう使えないかも・・。

1. mongoDBのインストール

前回の記事参照。
→ MongoDBインストール手順

2. mongooseのインストール

コマンド一発でOKです。

$ npm install mongoose

3. コードサンプル
// MongoDB
// MongoDBサーバーの設定
var mongoose = require('mongoose');
var crypto = require('crypto');

// Schemaを取得
var Schema = mongoose.Schema;

// ModelのSchema Class定義する
var CommentsSchema = new Schema({
  title: String,
  body: String,
  date: Date
});

// ModelのSchema Class定義する
var RoomSchema = new Schema({
  title: String,
  password: String,
  body: String,
  date: Date,
  comments: [CommentsSchema], // 1対多を埋め込み型で定義できる
  metadata: {
    votes: Number,
    favs: Number
  }
});

// middleware
// save処理の前にフックをかけれる。RailsでいうFilterみたいな機能
RoomSchema.pre('save', function (next) {
  this.password = 
    crypto.createHash('md5').update(this.password).digest("hex");
  next();
});

// モデル化。model('モデル名', '定義したスキーマクラス')
mongoose.model('Room', RoomSchema);

// mongodb://[hostname]/[dbname]
mongoose.connect('mongodb://localhost/chatroom');

// 定義したときの登録名で呼び出し
var Room = mongoose.model('Room');

// インスタンス生成
var room = new Room();

// 各カラムにデータを入力
room.title = 'test title';
room.body = 'this is a pen';

// 埋め込み型カラムはpush()を使う
room.comments.push(
  {title: 'comment title1',
    body: 'comment body1',
    password: 'your password'});
room.comments.push(
  {title: 'comment title2',
    body: 'comment body2',
    password: 'your password'});

// pre-hookを定義しているとsave時に定義した関数が走る
room.save(function(err) {
  if(!err) console.log('saved!')
});

// データの取得
Room.find({}, function(err, docs) {
  docs.forEach(function(doc){
    console.log(doc);
  });
});
Room.findOne({}, function(err, doc) {
  console.log(doc);
});
関連ページ
関連サイト

mongoosehttp://mongoosejs.com/
mongodbhttp://www.mongodb.org