24
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

node.js 超入門④mongodbを使ってみる

Last updated at Posted at 2017-09-11

ついに第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してみようと思います。

24
26
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?