ついに第4回です。
第一弾ではnode.jsの超基礎を学びながら簡単なwebサーバを作りました。
第二弾では、他のファイルに分割する方法や、ルーティングやファイルシステムを使ってHTMLで表示等を行いました。
第三弾では、簡単なアプリケーションを作ってみました。
今回は、前回のアプリケーションの続きとして、保存したデータの永続化(DBへの保存)もやってみます。
(長くなってしまいそうなので、今回はmongoに接続する所まで)
[基礎編]MongoDBとは
高速なNoSQLで、node.jsと相性が良いデータベースです。
最近の、NoSQLは、KVS
/ドキュメント指向データベース
/列指向データベース
等がありますが、
MongoDBは、スキーマレスなドキュメント指向データベースです。
MongoDBは、トランザクションやリレーショナル(JOIN)機能をつけない事で、高速でKVSレベルの高いパフォーマンスを実現します。
特にリアルタイム処理にも強く、node.jsと相性が抜群です。
MongoDBとRDBの比較
RDBで使われている用語とMongoDBで使われる用語の対応を書いておきます。
RDB | MongoDB |
---|---|
database | database |
table | collection |
record | document |
column | field |
index | index |
primary_key | _id |
ここで覚えておきたいのは、MongoDBはスキーマレスなドキュメント指向データベースであるという事です。
スキーマレスなので、RDBのように、カラム定義を行いません。
RDBでユーザ管理するテーブルを作れば、id(int), name(varchar), created_at(datetime)
のように、各カラムの型を指定するため、各レコードには同じ型のデータが入ります。
しかし、MongoDBの場合は、document毎に自由fieldを定義することが出来ます。
node.jsからMongoDBを扱ってみる
まずは、インストールして、接続する所までやってみたいと思います。
$ npm install mongodb
実際にDBにテストデータを入れて、取得する部分までやるとこんな感じになります。
config.db
にはtestdb
というデータベースの名前を入れてみました。
var mongoClient = require('mongodb').MongoClient;
var config = require('./config');
mongoClient.connect("mongodb://localhost/" + config.db, function(err, db) {
// エラー処理
if (err) {
return console.dir(err);
}
db.collection("users", function(err, collection) {
if (err) {
return console.dir(err);
}
// 挿入するデータ
var docs = [
{name: "山口", score: 20},
{name: "大田", score: 80},
{name: "長本", score: 100},
];
collection.insert(docs, function(err, result) {
// エラー処理
if (err) {
return console.dir(err);
}
});
// 検索する
collection.find().toArray(function(err, items) {
console.log(items);
});
});
});
検索してみる
先程はfind()
で全て取得しましたが、実際に検索してみて、mongoがどんなものか見てみましょう。
var mongoClient = require('mongodb').MongoClient;
var config = require('./config');
mongoClient.connect("mongodb://localhost/" + config.db, function(err, db) {
// エラー処理
if (err) {
return console.dir(err);
}
db.collection("users", function(err, collection) {
if (err) {
return console.dir(err);
}
// 検索する
collection.find({name: "長本"}).toArray(function(err, items) {
console.log(items);
});
});
});
このようにfindに指定すれば条件指定して取得が可能です。
$ node mongo.js
[ { _id: 59b69c558e9ce1484773fffd, name: '長本', score: 100 } ]
結構簡単ですね。
次回は、前回作ったアプリケーションのデータをmongodbに保存、取得してデータの永続化にtryしてみようと思います。