2012年12月8日土曜日

Node.jsが面白い件④ MongoDBで遊ぶ 〜Mongoose編その①〜

今回はNode.js+MongoDB環境でよく使われるMongooseを使ってみたいと思います。MongooseはODM(Object document mapper)の1つで、validationやmiddlewareなどのより高度な機能を提供します。まずはいつものようにインストールから。

 > npm install mongoose


Mongooseでは最初にSchemaを定義してdocumentを生成します。以下、サンプルプログラムです。

var mongoose = require('mongoose');

// enum
var genders = 'male,female,neuter'.split(',');

// DBクローズ処理。
var closeDB = function() {
  db.close(function(err, result) {
    console.log("close!");
  });
};

// コネクション。dbオプションとしてsafe:true, serverオプションとしてauto_reconnect:trueを設定。
var opts = {server:{auto_reconnect:true}, db:{safe:true}};
//var db = mongoose.createConnection('mongodb://localhost/exampleDB2', opts);
var db = mongoose.createConnection('localhost', 'exampleDB2', 27017, opts);

// 接続エラーの場合
db.on('error', console.error.bind(console, 'connection open error.'));

// 接続オープン
db.once('open', function() {
    // サンプルスキーマ
    var userSchema  = mongoose.Schema({
        uid : { type: String, required:true, index: {unique:true} },
        name: { first: String, last: String },
        age : { type: Number, min: 1 },
        gender : { type: String, enum: genders }
    });

    // collectionの定義。
    userSchema.set('collection', 'users');

    // モデルの作成。
    var User = db.model('User', userSchema);

    // インスタンス(document)作成。
    User.create(
      { uid: 'kat',
        name: {first: 'KAT', last:'INTINK'},
        age: 100,
        gender: 'male'
      }, function(err, user) {
        if (err) {
          console.log('[error] create');
          console.log(err);
          closeDB();
        } else {
          console.log('create done.');

          // ドキュメントの検索。
          User.find().exec(function(err, user) {
            if (err) {
              console.log('[error] query');
              console.log(err);
              closeDB();
            } else {
              console.log('query done.');
              console.log(user);

              // ドキュメントの削除。
              User.remove(function(err) {
                if (err) {
                  console.log('[error] remove');
                  console.log(err);
                  closeDB();
                } else {
                  console.log('remove done.');
                  closeDB();
                }
              });
            }
          });
        }
    });
});


Node.jsが面白い件③ MongoDBで遊ぶ 〜基本編〜で説明したNative Driverを使った方法と違い、Modelを通して処理をしていることがわかります。簡単/単純な処理を記述する場合はNative Driverでも十分ですが、世の中のODMと同じようにMongooseにも便利な機能が実装されています。次はそれらの機能について説明してみます。

0 件のコメント:

コメントを投稿