Node.js + Express + MongoDB + Mongoose でインタラクティブなサービス環境を構築してみます。
Contents
Node.js + Express + MongoDB + Mongoose
Node.js
Node.js はサーバサイド javascript です。
Node.js については下記をご参照ください。
Express
Node.js 用のフレームワークです。
Express については下記をご参照ください。
MongoDB
MongoDB は NoSQLデータベースです。
特徴としてはスキーマレスに使えることがあげられるます。そのかわり一貫性を持たせるようにしないと後々大変になります。
今回は Ubuntu 16.04 で導入してみます。
インストール
パッケージ管理システムで使用される公開鍵をインポート
1 |
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5 |
MongoDB用のリストファイルを作成
1 |
$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list |
ローカルパッケージデータベースをリロード
1 |
$ sudo apt-get update |
MongoDBパッケージをインストール
1 |
$ sudo apt-get install -y mongodb-org |
起動
MongoDB を起動させます。
1 |
$ sudo service mongod start |
確認
正常に起動したログを見て確認できます。
1 2 3 |
$ tail /var/log/mongodb/mongod.log .. [initandlisten] waiting for connections on port 27017 |
停止
MongoDB を停止させます。
1 |
$ sudo service mongod stop |
再起動
MongoDB を再起動します。
1 |
$ sudo service mongod restart |
使用
1 |
$ mongo --host 127.0.0.1:27017 |
データベース
test データベースを定義してコネクトします。
1 |
> use test |
Insert
データ登録します。
1 |
> db.test.insert({"name":"taro vistylee", domain:"vistylee.com"}) |
find
データ取得します。
1 2 |
> db.test.find() { "_id" : ObjectId("5ad1db96b55a5b32013766fe"), "name" : "taro vistylee", "domain" : "vistylee.com" } |
コレクション確認
コレクション(テーブルのようなもの)一覧表示
1 |
> show collections |
Mongoose
Mongoose とは MongoDB オブジェクトモデリングツールで、ORM のような感じで操作することが可能となります。
Express から Mongoose で MongoDB を操作してみます。
インストール
プロジェクト直下に移動して npm でインストールします。
1 |
$ npm install mongoose |
設定
Express 側で接続の設定を行います。
接続
1 2 3 4 5 |
mongoose.connect('mongodb://localhost:27017/test', function(err){ if(err) { console.error(err); } }); |
スキーマ定義
1 2 3 4 5 6 |
var Schema = mongoose.Schema; var testSchema = new Schema({ name: String, domain: String, }); |
モデル作成
1 |
var test = mongoose.model('test', testSchema); |
保存
1 2 3 4 5 6 7 |
var test = new test({ name: 'vistylee', domain: 'vistylee.com', }); test.save(function(err) { if (err) throw err; }); |
取得
1 2 3 4 |
test.find({'name': 'vistylee'}, function(err, result) { if (err) throw err; console.log(result); // 確認 }); |
まとめ
MongoDB のデータ構造は JSON に似た BSON 形式で保存されますが、JSON の仕様とは違いますので注意が必要です。Mongoose を利用することでスキーマを設定することになりますが、特殊なケースでなければスキーマ設定しておいたほうがアプリケーション設計の面からもよさそうです。
参考
公式:Mongoose ODM
Github:Automattic/mongoose: MongoDB object modeling designed to work in an asynchronous environment.