駆け出しのエンジニア日記

プログラミング言語勉強中の奮闘日記

Mongooseでのモデル作成・データの挿入

今回はシンプルなモデルを作成し、データベースへデータの挿入まで行っていきます。

モデル作成の前に、スキーマの定義が必要になります。書き方は下記の通りです。

//スキーマ定義・・・あるデータの形を定義したもの mongooseの中だけで使えるmongoDBとは無関係
const movieSchema = new mongoose.Schema({
title: String,
year: Number,
score: Number,
rating: String
});

スキーマ・・・あるデータの形を定義したもの

例えば、文字列型のフィールドはString, 数値型のフィールドはNumber,

真偽型のフィールドはBooleanで定義していくものです。

 

 

次に、上記のスキーマを使って、モデル作成を行います。

//モデルのクラス作成
 const Movie = mongoose.model('Movie', movieSchema);

mongoose.modelでスキーマモデル名を指定してスキーマを作成します。

Mongoose では、モデル名の複数形の小文字バージョンを自動的に検索します。

なので第一引数は、モデルの対象となるコレクションの単数形かつ最初文字は大文字

の名前となります。第二引数は作成したスキーマ名となっています。

 

この時点ではクラスが出来上がったのみで、データベースには何も起きていません。

「Movieクラス」を使ってインスタンスが作成でき、データベースに保存することも可能

となります。

インスタンス・・・クラスから実際にオブジェクトを生成する為には、new クラス名()」とします。

クラスから生成したオブジェクトをインスタンスと呼びます。

サンプルで一つインスタンスを作成してみます。

//モデルのインスタンス
 const amadeus = new Movie({ title: 'Amadeus', year: 1986, score: 10, rating: 'R' });

しかしこれではまだデータベースに保存はできていません。

 

ここから保存を行なっていきます。

nodeコマンドでREPLが開かれます。

$ node

「 .load ファイル名」で特定のファイルを読み込みます。

.load index.js

save()メソッドでデータベースへの保存ができています。

amadeus.save()

確認すると、データが挿入されています。

ひとまず完了です。

 

ここからは複数のデータを挿入できるようにしていきましょう。

今回は「 insertMany() 」を使っていきます。

Movie.insertMany([
{ title: 'Amelie', year: 2001, score: 8.3, rating: 'R' },
{ title: 'Alien', year: 1979, score: 8.1, rating: 'R' },
{ title: 'The Iron Giant', year: 1999, score: 7.5, rating: 'PG' },
{ title: 'Stand By Me', year: 1986, score: 8.6, rating: 'R' },
{ title: 'Moonrise Kingdom', year: 2012, score: 7.3, rating: 'PG-13' }
])

しかし、データベースへデータの挿入になると時間がかかります。

その場合、JavaScriptの世界では非同期処理について考えていきます。

早速追加で記述します。

// 複数ドキュメントを挿入
Movie.insertMany([
{ title: 'Amelie', year: 2001, score: 8.3, rating: 'R' },
{ title: 'Alien', year: 1979, score: 8.1, rating: 'R' },
{ title: 'The Iron Giant', year: 1999, score: 7.5, rating: 'PG' },
{ title: 'Stand By Me', year: 1986, score: 8.6, rating: 'R' },
{ title: 'Moonrise Kingdom', year: 2012, score: 7.3, rating: 'PG-13' }
]).then(data => {
console.log('成功');
console.log(data);
});

※一旦エラーについては無視します

「 node ファイル名 」 でjsファイルを実行します。

データベースを確認すると

複数のデータが追加されています。成功です。