HogeFugaHogera

IT系の備忘録とか、他徒然なるままに

Mongoose クイックスタートガイド

MongoDB、有名ですね。今更ながら、Node.jsで使用してみることにしました。 MongoDBにNode.jpからアクセスするために、mongoose v3.8.23を使用しました。

以下は、とりあえず動かしてみるために、ガイドの翻訳になります。内容は、簡単な子猫のデータベースを作るというもの。


Getting Start

まず、MongoDBとNode.jsがインストールされていることを確認してください。 次に、npmをつかってコマンドラインからMonggoseをインストールします:

$ npm install mongoose

まず、我々はフワフワな子猫が好きで、会った事のある全ての子猫をMongoDBで記録したい。最初にすることは、プロジェクトにmongooseを含ませ、ローカルで動いているMongoDBのインスタンス上のTest データベースと接続をオープンする必要がある。

// getting-started.js
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

我々は、localhostで動くTest データベースに対して、(接続が成功したか)不確定な接続を得る。その時に、接続が成功したのかエラーが発生したのかを知る必要がある:

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function (callback) {
  // yay!
});

コネクションは一度だけオープンし、コールバックが呼ばれる。簡潔にするため、以下全てのコードはコールバックに含まれると仮定しよう。

Mongooseでは、全てがスキーマから得られる。スキーマに関連づけて、我々の子猫(Kitten)を定義しよう。

var kittySchema = mongoose.Schema({
    name: String
})

ここまでは順調。我々は、nameというStringのプロパティ()を1つ持つスキーマを得た。次のステップは、モデルを通してスキーマを作製する。

var Kitten = mongoose.model('Kitten', kittySchema)

モデルは、ドキュメントを構築するためのクラスである。このケースでは、我々のスキーマが宣言されると、ドキュメントはプロパティと振る舞いを持ったKittenとなる。我々が丁度歩道の脇で出会った男の子の猫を表す、Kittenドキュメントを作製しよう。

var silence = new Kitten({ name: 'Silence' })
console.log(silence.name) // 'Silence'

Kittenは鳴く事ができるから、ドキュメントにspeak()関数を追加する方法を見てみよう。

// NOTE: メソッドは、mongoose.model()でコンパイルする前に追加すること
kittySchema.methods.speak = function () {
  var greeting = this.name
    ? "Meow name is " + this.name
    : "I don't have a name"
  console.log(greeting);
}

var Kitten = mongoose.model('Kitten', kittySchema)

スキーマmethodプロパティに追加された関数は、そのモデルのプロトタイプに含まれ、各ドキュメントのインスタンスで公開される。

var fluffy = new Kitten({ name: 'fluffy' });
fluffy.speak() // 出力: "Meow name is fluffy"

我々は喋るKitten! を得られたが、MongoDBに何も保存されていない。saveメソッドにより、各ドキュメントはデータベースに保存できる。コールバック関数の第一引数は、エラーが発生した場合に生成される。

fluffy.save(function (err, fluffy) {
  if (err) return console.error(err);
  fluffy.speak();
});

時が過ぎて、これまでに見た子猫達をすべて表示したい。我々は、Kittenモデルを通して、全ての子猫達にアクセスできる。

Kitten.find(function (err, kittens) {
  if (err) return console.error(err);
  console.log(kittens)
})

コンソールに、db上のずべての子猫たちが出力される。名前で子猫達にフィルターを通したいなら、Mongooseはリッチなquerying シンタックスをサポートしている。

Kitten.find({ name: /^Fluff/ }, callback)

この挙動は、"Fluff"から始まるnameプロパティを持つ全てのドキュメントを検索し、その結果をコールバックに返す。

Congratulations

クイックスタートはこれで終了です。我々はスキーマを作って、自製のドキュメントメソッドを追加し、Mongooseを使ってMongoDB上に保存と問い合わせを行いました。より詳しくは、guideAPI docsをどうぞ。