MongoDB - 接続

このチュートリアルでは、MongoDB のさまざまな接続方法について説明します。

MongoDB サービスを起動する

前のチュートリアルでは、すでに次のことについて説明しました。MongoDB サービスの起動方法、MongoDB のインストールディレクトリの bin ディレクトリで実行するだけです。mongodbだけでよい。

起動操作を実行すると、mongodb は必要な情報を出力した後、それ以上の情報は出力せず、接続が確立されるのを待ちます。接続が確立されると、ログ情報の出力を開始します。

次を使用できますMongoDB shellMongoDB サーバーに接続できます。また、PHP を使用して MongoDB に接続することもできます。このチュートリアルでは、MongoDB shell を使用して MongoDB サービスに接続します。以降の章では、PHP、Python、Node.js を使用して MongoDB サービスに接続する方法を説明します。

標準 URI 接続構文:

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
  • mongodb://:プロトコルヘッダー。MongoDB を使用することを示します。
  • [username:password@]:(オプション)認証情報。ユーザー名とパスワードを含みます。
  • host1[:port1][,...hostN[:portN]]:サーバーのアドレスとポート。1 つまたは複数の MongoDB サーバーのアドレスとポートを指定できます。
  • /[defaultauthdb]:(オプション)デフォルトの認証データベース。
  • [?options]:(オプション)接続オプション。

標準の接続形式には複数のオプション(options)が含まれます。次のとおりです。

  • authSource:認証データベースを指定します。
  • replicaSet:レプリカセットの名前を指定します。
  • ssl:SSL 接続を有効にします(true または false)。
  • readPreference:読み取りプリファレンスを指定します。例:primary, primaryPreferred, secondary, secondaryPreferred, nearest。
  • connectTimeoutMS:接続タイムアウト時間(ミリ秒)を指定します。
  • socketTimeoutMS:ソケットタイムアウト時間(ミリ秒)を指定します。

ローカル MongoDB インスタンス(デフォルトポート 27017)に接続:

mongodb://localhost

ローカル MongoDB インスタンスに接続し、データベースを指定:

mongodb://localhost/mydatabase

ユーザー名とパスワードを使用してローカル MongoDB インスタンスに接続:

mongodb://username:password@localhost/mydatabase

リモート MongoDB インスタンスに接続:

mongodb://remotehost:27017

レプリカセット(Replica Set)に接続:

mongodb://host1:27017,host2:27017,host3:27017/mydatabase?replicaSet=myReplicaSet

SSL を使用して MongoDB に接続:

mongodb://username:password@localhost:27017/mydatabase?ssl=true

複数のオプションを使用して接続:

mongodb://username:password@localhost:27017/mydatabase?authSource=admin&ssl=true

Python (PyMongo)

例

from pymongo import MongoClient

client = MongoClient('mongodb://user:password@localhost:27017/mydatabase?authSource=admin')
db = client['mydatabase']

Node.js (Mongoose)

例

const mongoose = require('mongoose');

mongoose.connect('mongodb://user:password@localhost:27017/mydatabase?authSource=admin', {
  useNewUrlParser: true,
  useUnifiedTopology: true
});

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  console.log('Connected to MongoDB');
});

PHP (Mongoose)

例

<?php
require 'vendor/autoload.php'; // Composer の自動ロードファイルを読み込む

$client = new MongoDB\Client("mongodb://localhost:27017"); // ローカル MongoDB インスタンスに接続
$database = $client->selectDatabase('mydatabase'); // データベースを選択
$collection = $database->selectCollection('mycollection'); // コレクションを選択

// ドキュメントを挿入
$result = $collection->insertOne(['name' => 'Alice', 'age' => 30]);
echo "Inserted with Object ID '{$result->getInsertedId()}'";

// ドキュメントをクエリ
$document = $collection->findOne(['name' => 'Alice']);
echo "Found document: " . json_encode($document);
?>

Java

例

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase;

public class MongoDBConnection {
    public static void main(String[] args) {
        String uri = "mongodb://user:password@localhost:27017/mydatabase?authSource=admin";
        try (MongoClient mongoClient = MongoClients.create(uri)) {
            MongoDatabase database = mongoClient.getDatabase("mydatabase");
            System.out.println("Connected to MongoDB");
        }
    }
}

例

デフォルトポートを使用して MongoDB サービスに接続します。

mongodb://localhost

シェルを使用して MongoDB サービスに接続:

./mongosh
Current Mongosh Log ID:    66792d6b87657ebec9ed70f1
Connecting to:        mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.2.9
Using MongoDB:        7.0.11
Using Mongosh:        2.2.9

このとき、実行中の./mongodコマンドのウィンドウを確認すると、MongoDB サーバーにどこから接続されているかを確認できます。次の情報が表示されます:

……省略信息……
2015-09-25T17:22:27.336+0800 I CONTROL  [initandlisten] allocator: tcmalloc
2015-09-25T17:22:27.336+0800 I CONTROL  [initandlisten] options: { storage: { dbPath: "/data/db" } }
2015-09-25T17:22:27.350+0800 I NETWORK  [initandlisten] waiting for connections on port 27017
2015-09-25T17:22:36.012+0800 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:37310 #1 (1 connection now open)  # 该行表明一个来自本机的连接

……省略信息……

MongoDB 接続コマンドの形式

ユーザー名とパスワードを使用して MongoDB サーバーに接続するには、'username:password@hostname/dbname' 形式を使用します。'username' はユーザー名、'password' はパスワードです。

ユーザー名とパスワードを使用してデフォルトデータベースに接続してログイン:

$ ./mongosh
MongoDB shell version: 4.0.9
connecting to: test

ユーザー admin、パスワード 123456 を使用してローカルの MongoDB サービスに接続します。出力結果は次のとおりです。

> mongodb://admin:123456@localhost/
... 

ユーザー名とパスワードを使用して指定したデータベースに接続してログインします。形式は次のとおりです。

mongodb://admin:123456@localhost/test

その他の接続例

ローカルデータベースサーバーに接続します。ポートはデフォルトです。

mongodb://localhost

ユーザー名 fred、パスワード foobar を使用して localhost の admin データベースにログインします。

mongodb://fred:foobar@localhost

ユーザー名 fred、パスワード foobar を使用して localhost の baz データベースにログインします。

mongodb://fred:foobar@localhost/baz

replica pair に接続します。サーバー1 は example1.com、サーバー2 は example2 です。

mongodb://example1.com:27017,example2.com:27017

replica set の 3 台のサーバー(ポート 27017、27018、27019)に接続:

mongodb://localhost,localhost:27018,localhost:27019

replica set の 3 台のサーバーに接続し、書き込み操作はプライマリサーバーに適用し、クエリをセカンダリサーバーに分散します。

mongodb://host1,host2,host3/?slaveOk=true

最初のサーバーに直接接続します。replica set の一部であっても、プライマリサーバーまたはセカンダリサーバーであってもかまいません。

mongodb://host1,host2,host3/?connect=direct;slaveOk=true

接続サーバーに優先順位があり、すべてのサーバーをリストアップする必要がある場合は、上記の接続方法を使用できます。

セーフモードで localhost に接続:

mongodb://localhost/?safe=true

セーフモードで replica set に接続し、少なくとも 2 つのレプリカサーバーが正常に書き込まれるまで待機します。タイムアウト時間は 2 秒に設定します。

mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000
その他の拡張