はじめに
最初に行うべきことは、MongoDBとNode.jsがインストールされていることを確認することです。
次に、npmを使用してコマンドラインからMongooseをインストールします。
npm install mongoose --saveふわふわの子猫が好きで、これまでに会ったすべての子猫をMongoDBに記録したいとします。最初にすることは、mongooseをプロジェクトに含め、ローカルで実行されているMongoDBのインスタンスでtestデータベースへの接続を開くことです。
// getting-started.js
const mongoose = require('mongoose');
main().catch(err => console.log(err));
async function main() {
await mongoose.connect('mongodb://127.0.0.1:27017/test');
// use `await mongoose.connect('mongodb://user:password@127.0.0.1:27017/test');` if your database has auth enabled
}簡潔にするために、以降のコードはすべてmain()関数内にあるものと仮定します。
Mongooseではすべてがスキーマから派生しています。スキーマの参照を取得して子猫を定義しましょう。
const kittySchema = new mongoose.Schema({
name: String
});これまで問題ありません。1つのプロパティnameを持つスキーマがあり、それはStringになります。次に、スキーマをモデルにコンパイルします。
const Kitten = mongoose.model('Kitten', kittySchema);モデルとは、ドキュメントを作成するクラスのことです。この場合、各ドキュメントはスキーマで宣言されたプロパティと動作を持つ子猫になります。外で出会ったばかりの子猫を表す子猫ドキュメントを作成しましょう
const silence = new Kitten({ name: 'Silence' });
console.log(silence.name); // 'Silence'子猫は鳴くことができるので、ドキュメントに「しゃべる」機能を追加する方法を見てみましょう
// NOTE: methods must be added to the schema before compiling it with mongoose.model()
kittySchema.methods.speak = function speak() {
const greeting = this.name
? 'Meow name is ' + this.name
: 'I don\'t have a name';
console.log(greeting);
};
const Kitten = mongoose.model('Kitten', kittySchema);スキーマのmethodsプロパティに追加された関数はModelのプロトタイプにコンパイルされ、各ドキュメントインスタンスで公開されます
const fluffy = new Kitten({ name: 'fluffy' });
fluffy.speak(); // "Meow name is fluffy"話せる子猫が完成しました!しかし、まだMongoDBに何も保存していません。各ドキュメントはsaveメソッドを呼び出すことでデータベースに保存できます。コールバックに対する最初の引数は、エラーが発生した場合はエラーになります。
await fluffy.save();
fluffy.speak();時間が経ってから、これまでに見た子猫をすべて表示したいとします。Kittenmodelを通じて、すべての子猫ドキュメントにアクセスできます。
const kittens = await Kitten.find();
console.log(kittens);データベース内のすべての子猫をコンソールに記録しました。名前で子猫をフィルタリングしたい場合、MongooseはMongoDBの豊富なクエリ構文をサポートしています。
await Kitten.find({ name: /^fluff/ });これは、名前プロパティが「fluff」で始まるすべてのドキュメントを検索し、結果をコールバックに子猫の配列として返します。
おめでとうございます
クイックスタートは以上です。スキーマを作成し、カスタムのドキュメントメソッドを追加し、Mongooseを使用してMongoDBの子猫を保存し、クエリしました。ガイドまたはAPIドキュメントでさらに詳しくお読みください。

