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)
例
client = MongoClient('mongodb://user:password@localhost:27017/mydatabase?authSource=admin')
db = client['mydatabase']
Node.js (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)
例
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.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その他の拡張