Node.js から MongoDB へ 接続 / 操作 する 方法

0 件のコメント

Node.js から MongoDB へ接続して操作する方法をまとめました。 Shell から行うのとは少し違違い、コールバック を利用して実装を行います。 この記事ではドライバーのインストールから接続、操作までを扱います。

はじめに

ここでは基本となる MongoDB ドライバー mongodb を利用して MongoDB にアクセス、操作を行うチュートリアルをまとめます。

MongoDB サーバーは起動してあり、 MongoDB サーバーと同じ端末上で実装を行う前提でサンプルコードを記述しています。 また、接続先のデータベースは sample_database とし、利用するコレクションは products としています。

復習までに… MongoDB サーバー の起動、プロジェクトの初期化 コマンドを以下に載せます。

MongoDB サーバー 起動

mongod --dbpath "C:\data\db"

プロジェクトディレクトリ作成および初期化

mkdir sample
npm init

ドライバー の インストール

package.json がすでに作られていれば、プロジェクトルートディレクトリにおいて以下のコマンドを実行して MongoDB ドライバー である mongodb をインストールします。

npm install mongodb --save

MongoDB へ 接続

MongoDB への接続は mongodbMongoClient.connect() を利用します。 MongoDB への接続サンプルコードは以下のようになります。

app.js

var MongoClient = require("mongodb").MongoClient;

// 接続文字列
var url = "mongodb://localhost:27017/sampledb";

// MongoDB へ 接続
MongoClient.connect(url, (error, db) => {
    // 接続メッセージを表示
    console.log("MongoDB へ 接続中...");

    // MongoDB への 接続 を 切断
    db.close();
});

ドキュメント の 挿入

insert() というメソッドもありますが、非推奨になっていました…。 現在は、単一ドキュメントであれば insertOne() 、複数ドキュメントであれば insertMany() を利用して挿入します。 以下は単一ドキュメントを挿入するサンプルコードです。

app.js

var MongoClient = require("mongodb").MongoClient;

// 接続文字列
var url = "mongodb://localhost:27017/sampledb";

// MongoDB へ 接続
MongoClient.connect(url, (error, db) => {
    var collection;

    // コレクションの取得
    collection = db.collection("products");

    // コレクションにドキュメントを挿入
    collection.insertOne({
        "name": "Hack MongoDB",
        "price": 1280
    }, (error, result) => {
        db.close();
    });
});

ドキュメント の 取得

find() メソッドを利用してドキュメントを取得します。 取得した結果は戻り値として Cursor オブジェクトが取得されます。 Cursor.toArray() に指定するコールバック関数の第2引数が指定した条件に合致するドキュメントのリストになります。

以下には全量取得と条件指定取得のサンプルコードを載せます。

app.js

var MongoClient = require("mongodb").MongoClient;

// 接続文字列
var url = "mongodb://localhost:27017/sampledb";

// MongoDB へ 接続
MongoClient.connect(url, (error, db) => {
    var collection;

    // コレクションの取得
    collection = db.collection("products");

    // コレクションに含まれるドキュメントをすべて取得
    collection.find().toArray((error, documents) => {
        for (var document of documents) {
            console.log(document.name);
        }
    });

    // コレクション中で条件に合致するドキュメントを取得
    collection.find({price: {$lt: 2000}}).toArray((error, documents)=>{
        for (var document of documents) {
            console.log(document.name);
        }
    });
});

ドキュメント の 更新

insert() と同じく update() は非推奨となっています。 単一ドキュメント(条件に合致する最初のドキュメントのみ)の更新では updateOne() 、複数ドキュメントの更新では udateMany() を利用して更新します。

以下は条件に合致するドキュメントをすべて更新するサンプルコードです。

app.js

var MongoClient = require("mongodb").MongoClient;

// 接続文字列
var url = "mongodb://localhost:27017/sampledb";

// MongoDB へ 接続
MongoClient.connect(url, (error, db) => {
    var collection;

    // コレクションの取得
    collection = db.collection("products");

    // 条件に合致するドキュメントをすべて更新
    collection.updateMany(
        { price: { $gt: 1000 } },
        { $set: { price: 1000 } },
        (error, result) => {
            db.close();
        });
});

ドキュメント の 削除

remove() は非推奨です。 単一ドキュメント削除では deleteOne() を、 複数ドキュメント削除では deleteMany() を利用します。

以下は条件に合致するすべてのドキュメントを削除するサンプルコードです。

app.js

var MongoClient = require("mongodb").MongoClient;

// 接続文字列
var url = "mongodb://localhost:27017/sampledb";

// MongoDB へ 接続
MongoClient.connect(url, (error, db) => {
    var collection;

    // コレクションの取得
    collection = db.collection("products");

    // 条件に合致するドキュメントを削除
    collection.deleteMany(
        { name: { $eq: "sample book" } },
        (error, result) => {
            db.close();
        }
    );
});

参考記事