今更Node.jsとExpressかよ!と突っ込まれるかもしれません。こんにちは。
rete.jsを使いたいためにExpressのチュートリアルを進めていますがどう活きるかまだわかりません。
今回はこちらのPart3をやります。
https://developer.mozilla.org/ja/docs/Learn/Server-side/Express_Nodejs/mongoose
Part3にしてデータベース。楽しみです。
データベースの選定
Expressも他のwebフレームワークと同様にいろいろ選択できるみたいですね。
そのまま使うかODM/ORMを選択も必要そうです。
推奨としては速度優先じゃないならODM/ORMを使った方が開発・保守コストを削減できるから
ODM/ORMの方がいいんじゃないとのこと。
個人的にも速度を犠牲にしても拡張性が欲しいのでそちらを選択したいところです。
NPMパッケージでは多数のODM/ORMを利用できるようです。
チュートリアルの選択はMongooseというもので、書いている時点で最も人気のある
ODMのようです。
データベースはMongoDBを使うとのこと。
NoSQL系のデータベースは触ったことがないのでそういう意味でも楽しみです。
MongooseとMongoDB
Nodeコミュニティでは特に人気のある組み合わせみたいです。
それは使用感がJsonに似ていて親しみやすいから、ということみたいですね。
インストール
mongoose
npm install mongoose
mongoDB
https://www.mongodb.com/download-center/community
ローカルインストールとクラウド(Azure, GCP, AWS)があります。
クラウド版使いたいなぁと思いつつとりあえずwindows版を。
モデル設計
チュートリアルでは書籍のライブラリアプリを作成するようです。
そのために必要なデータの洗い出しから始まっています。
細かく書くのは大変なのでモデルだけ。
・Book
本のタイトル、著者※1、ISBM、ジャンル※2 など
・BookInstance
本のオブジェクトにステータスをつけたもの
・Author(著者※1)
性、名、誕生日、死亡日など
・Genre(ジャンル※2)
名前など
本は同じものが複数存在するからそれぞれにステータスを変えれるようにBookInstanceがあるんですね。
mongoDBデビュー
上で書いた通りmongoDBは初めてさわります。言葉の概念もよくわかりません。
データベースを作成と同時にコレクションを作ってくれといわれてもよくわからないのですが
検索してみたら要するにsqlでいうところのテーブルなんですね。
ではBookというコレクションを最初に作成してみました。
そしてなんとここからチュートリアルが翻訳されていませんw
mongooseを読み込む。mongoDBに接続する。
ここからは斜め読みで進めてみます。
app.jsにdb周りの記述を追加します。
var app = express();
の下に追加します。
var mongoose = require("mongoose"); var mongoDB = "mongodb://localhost/<database_name>"; //portはいらないんだー。と思いました。 mongoose.connect(mongoDB); mongoose.Promise = global.Promise; var db = mongoose.connection; db.on("error", console.error.bind(console, "MongoDB connection error:"))
モデルの作成
モデルはどこに作るんだろうとみたら別のjsとしてつくるみたいですね。
ふむ。
わかりやすいです。
が、jsの文字列の扱いがなれません。。括らなくてもOKなの?
XXXSchema.virtual(名前).get(function(){return XXXXX})
これはレコードが追加された瞬間に処理されるのでしょうか。問い合わせがあった時に処理されるのでしょうか。
仮データを入れる
チュートリアルの方でコードを用意してくれているみたいです。
populatedb.jsをルートに置いてnodeコマンドで実行するみたいです。
そのjsの中でasyncというモジュールを使っているのでインストールしときます。
npm install async
node populaterdb <database_name>
実行したらだだだっとデータが入りました。
name | count | size |
---|---|---|
authors | 5 | 99.4B |
bookinstance | 11 | 133.5b |
books | 7 | 405.6B |
genres | 3 | 53.7B |
順調順調。
つづく。