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上に保存と問い合わせを行いました。より詳しくは、guide、API docsをどうぞ。