ApsaraDB for MongoDB は MongoDB プロトコルと完全に互換性があります。このトピックでは、さまざまな言語でレプリカセットインスタンスに接続するために使用されるサンプルコードについて説明します。
前提条件
お使いの言語の公式ドライバパッケージがダウンロードされ、インストールされています。詳細については、MongoDB Drivers にアクセスしてください。
使用上の注意
レプリカセットインスタンスのアカウントパスワードに特殊文字(! @ # $ % ^ & * ( ) _ + =)が含まれている場合は、接続文字列でこれらの特殊文字をエスケープする必要があります。次の表に、特殊文字とエスケープ文字のマッピングを示します。
特殊文字 | エスケープ文字 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
たとえば、元のパスワードが ab@#c の場合、接続文字列のパスワードは ab%40%23c に変換されます。
Node.js を使用してレプリカセットインスタンスに接続する
MongoDB 用 Node.js ドライバの詳細については、「MongoDB Node.js Driver」をご参照ください。
クライアントで次のコマンドを実行して、プロジェクトを初期化します。
mkdir node-mongodb-demo cd node-mongodb-demo npm init -y次のコマンドを実行して、ドライバパッケージをインストールします。
npm install mongodbレプリカセットインスタンスに接続するために使用される情報を取得します。詳細については、「レプリカセットインスタンスに接続する」をご参照ください。
次のサンプルコードを Node.js として保存します。
const MongoClient = require('mongodb').MongoClient; // データベース名とコレクション名。 const demoDb = "test"; const demoColl = "testColl"; // 高可用性を確保するために、レプリカセットインスタンスの接続文字列 URI を使用することをお勧めします。 // コードが実行されるサーバーが ApsaraDB for MongoDB インスタンスに接続できることを確認してください。 // パスワードに特殊文字が含まれている場合は、特殊文字をエスケープします。 const url = "mongodb://root:****@dds-2ze043****.mongodb.rds.aliyuncs.com:3717,dds-2ze043****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-63****" console.info("url:", url); // MongoClient を取得します。 const client = new MongoClient(url); async function run() { try { // インスタンスに接続します。 await client.connect(); // データベースハンドルを取得します。 const database = client.db(demoDb); // コレクションハンドルを取得します。 const collection = database.collection(demoColl); // レコードを組み立てます。 const demoName = "Node For Demo"; const doc = { "DEMO": demoName, "MESG": "Hello AliCloudDB For MongoDB" }; console.info("ready insert document: ", doc); // レコードを挿入します。 const result = await collection.insertOne(doc); console.log( `A document was inserted with the _id: ${result.insertedId}`, ); // データを読み取ります。 const filter = { "DEMO": demoName }; const findResult = await collection.find(filter); await findResult.forEach(console.dir); } finally { // 接続を閉じます。 await client.close(); } } run().catch(console.dir);node Node.jsコマンドを実行します。
PHP を使用してレプリカセットインスタンスに接続する
MongoDB 用 PHP ドライバの詳細については、「MongoDB PHP Driver」をご参照ください。
次のコマンドを実行して、ドライバパッケージをインストールします。
$ pecl install mongodb # PHP の INI ファイルパスを取得します。 $ php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||" # INI ファイルに次の情報を追加します。既に存在する場合は、この手順をスキップします。 $ extension=mongodb.so # プロジェクトディレクトリを作成し、アクセスします。 $ mkdir php-demo $ cd php-demo # composer を使用して MongoDB 依存関係をインストールします。composer がインストールされていない場合は、https://getcomposer.org/download からダウンロードできます。 $ composer require mongodb/mongodbレプリカセットインスタンスに接続するために使用される情報を取得します。詳細については、「レプリカセットインスタンスに接続する」をご参照ください。
次のサンプルコードを main.php として保存します。
<?php require 'vendor/autoload.php'; // Composer の機能を含めます // 高可用性を確保するために、レプリカセットインスタンスの接続文字列 URI を使用することをお勧めします。 // コードが実行されるサーバーが ApsaraDB for MongoDB インスタンスに接続できることを確認してください。 // パスワードに特殊文字が含まれている場合は、特殊文字をエスケープします。 $replicaset_url = 'mongodb://root:****@dds-2ze043****.mongodb.rds.aliyuncs.com:3717,dds-2ze043****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-63****'; $test_db = 'test'; $test_coll = 'testColl'; // MongoClient を作成します。 $client = new MongoDB\Client($replicaset_url); $collection = $client->$test_db->$test_coll; // レコードを挿入します。 $result = $collection->insertOne(['name' => 'ApsaraDB for Mongodb', 'desc' => 'Hello, Mongodb']); echo "Inserted with Object ID '{$result->getInsertedId()}'", "\n"; // レコードをクエリします。 $result = $collection->find(['name' => 'ApsaraDB for Mongodb']); foreach ($result as $entry) { echo $entry->_id, ': ', $entry->name, "\n"; } ?>php -f main.phpコマンドを実行します。
Java を使用してレプリカセットインスタンスに接続する
MongoDB 用 Java ドライバの詳細については、「MongoDB Java Driver」をご参照ください。
この例では、IDE(IntelliJ IDEA および Eclipse IDE)を使用しています。IDE 環境でレプリカセットインスタンスに接続するには、JDK が JDK 8 以降である必要があります。
レプリカセットインスタンスに接続するために使用される情報を取得します。詳細については、「レプリカセットインスタンスに接続する」をご参照ください。
Maven 依存関係を追加します。
<dependencies> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>4.8.0</version> </dependency> </dependencies>次の Java サンプルコードを使用します。
説明次のコードは、ApsaraDB for MongoDB インスタンスへの接続を手動で構成する方法の例を示しています。Spring Boot プロジェクトでこの構成を使用する場合は、
@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration,class})を追加して自動構成を無効にすることをお勧めします。これにより、構成の競合による接続エラーを防ぎます。// JDK 8 以降。 import static com.mongodb.client.model.Filters.eq; import org.bson.Document; import com.mongodb.MongoException; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.result.InsertOneResult; public class Main { public static void main( String[] args ) { // 高可用性を確保するために、レプリカセットインスタンスの接続文字列 URI を使用することをお勧めします。 // コードが実行されるサーバーが ApsaraDB for MongoDB インスタンスに接続できることを確認してください。 // パスワードに特殊文字が含まれている場合は、特殊文字をエスケープします。 String uri = "mongodb://root:****@dds-2ze043****.mongodb.rds.aliyuncs.com:3717,dds-2ze043****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-63****"; String demoDb = "test"; String demoColl = "testColl"; try (MongoClient mongoClient = MongoClients.create(uri)) { MongoDatabase database = mongoClient.getDatabase(demoDb); MongoCollection<Document> collection = database.getCollection(demoColl); // レコードを挿入します。 try { InsertOneResult result = collection.insertOne(new Document() .append("DEMO", "Java for Demo") .append("MESG", "Hello AliCloudDB For MongoDB")); System.out.println("Success! Inserted document id: " + result.getInsertedId()); } catch (MongoException me) { System.err.println("Unable to insert due to an error: " + me); } // 最初のレコードをクエリします。 Document doc = collection.find(eq("DEMO", "Java for Demo")).first(); System.out.println(doc.toJson()); mongoClient.close(); } } }IDE ツールで、[実行] をクリックします。
Python を使用してレプリカセットインスタンスに接続する
MongoDB 用 Python ドライバの詳細については、「MongoDB Python Driver」をご参照ください。
この例では、Python 3.9 を使用しています。
PyMongo をインストールします。
pip install pymongoレプリカセットインスタンスに接続するために使用される情報を取得します。詳細については、「レプリカセットインスタンスに接続する」をご参照ください。
次のサンプルコードを Main.py として保存します。
# Python 3.9 を使用してコードを実行します。 from pymongo import MongoClient # 高可用性を確保するために、レプリカセットインスタンスの接続文字列 URI を使用することをお勧めします。 # コードが実行されるサーバーが ApsaraDB for MongoDB インスタンスに接続できることを確認してください。 # パスワードに特殊文字が含まれている場合は、特殊文字をエスケープします。 REPLICASET_URL = 'mongodb://root:****@dds-2ze043****.mongodb.rds.aliyuncs.com:3717,dds-2ze043****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-63****' testDb = 'test' testColl = 'testColl' # MongoClient を取得します。 client = MongoClient(REPLICASET_URL) # レコードを挿入します。 doc = dict(DEMO="Python for demo", MESG="Hello ApsaraDB For MongoDB") doc_id = client.testDb.testColl.insert_one(doc).inserted_id print ('doc_id:', doc_id) # レコードをクエリします。 for d in client.testDb.testColl.find(dict(DEMO="Python for demo")): print ('find documents:', d) client.close()python3.9 Main.pyコマンドを実行します。
C# を使用してレプリカセットインスタンスに接続する
MongoDB 用 C# ドライバの詳細については、「MongoDB C# Driver」をご参照ください。
この例では、IDE(Visual Studio)を使用しています。
Visual Studio の NuGet パッケージ管理ツール()を使用して、次のパッケージをダウンロードします。
MongoDB.Driverレプリカセットインスタンスに接続するために使用される情報を取得します。詳細については、「レプリカセットインスタンスに接続する」をご参照ください。
次の C# サンプルコードを使用します。
using MongoDB.Bson; using MongoDB.Driver; using System; using System.Collections.Generic; namespace Aliyun { class Program { static void Main(string[] args) { // 高可用性を確保するために、レプリカセットインスタンスの接続文字列 URI を使用することをお勧めします。 // コードが実行されるサーバーが ApsaraDB for MongoDB インスタンスに接続できることを確認してください。 // パスワードに特殊文字が含まれている場合は、特殊文字をエスケープします。 const string replicaSetUrl = "mongodb://root:****@dds-2ze043****.mongodb.rds.aliyuncs.com:3717,dds-2ze043****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-63****"; const string testDb = "test"; const string testColl = "testColl"; try { // サーバーに接続し、クライアントを取得します。 MongoClient client = new MongoClient(replicaSetUrl); // コレクションを取得します。 var database = client.GetDatabase(testDb); var collection = database.GetCollection<BsonDocument>(testColl); // レコードを挿入します。 var document = new BsonDocument { { "name", "Csharp for Mongodb" }, { "desc", "Hello ApsaraDB For MongoDB" } }; collection.InsertOne(document); Console.WriteLine("Insert done\n"); // レコードをクエリします。 var cursor = collection.Find(new BsonDocument{ { "name", "Csharp for Mongodb" } }).ToCursor(); foreach (var doc in cursor.ToEnumerable()) { Console.WriteLine(doc); } } catch (Exception e) { Console.WriteLine("connection failed:" + e.Message); } } } }IDE ツールで、[実行] をクリックします。
Go を使用してレプリカセットインスタンスに接続する
MongoDB 用 Go ドライバの詳細については、「MongoDB Go Driver」をご参照ください。
次のコマンドを実行して、ドライバパッケージをインストールします。
go get go.mongodb.org/mongo-driverレプリカセットインスタンスに接続するために使用される情報を取得します。詳細については、「レプリカセットインスタンスに接続する」をご参照ください。
次のサンプルコードを main.go として保存します。
package main import ( "context" "fmt" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "log" ) func main() { // 高可用性を確保するために、レプリカセットインスタンスの接続文字列 URI を使用することをお勧めします。 // コードが実行されるサーバーが ApsaraDB for MongoDB インスタンスに接続できることを確認してください。 // パスワードに特殊文字が含まれている場合は、特殊文字をエスケープします。 replicaSetUrl := "mongodb://root:****@dds-2ze043****.mongodb.rds.aliyuncs.com:3717,dds-2ze043****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-63****" testDb := "test" testColl := "testColl" clientOpts := options.Client().ApplyURI(replicaSetUrl) // サーバーに接続し、クライアントを取得します。 client, err := mongo.Connect(context.TODO(), clientOpts) if err != nil { fmt.Println("connect failed!") log.Fatal(err) return } fmt.Println("connect successful!") // 接続を閉じます。 defer func() { if err = client.Disconnect(context.TODO()); err != nil { fmt.Println("disconnect failed!") log.Fatal(err) } fmt.Println("disconnect successful!") }() // サーバーに ping を実行して、接続が成功したことを確認します。 if err = client.Ping(context.TODO(), nil); err != nil { fmt.Println("ping failed!") log.Fatal(err) return } fmt.Println("ping successful!") // レコードを挿入します。 collection := client.Database(testDb).Collection(testColl) res, err := collection.InsertOne(context.Background(), bson.M{"hello": "world"}) if err != nil { fmt.Println("insert result failed!") log.Fatal(err) return } id := res.InsertedID fmt.Println("Id: ", id) fmt.Printf("insert result: %v\n", res) // レコードをクエリします。 result := bson.M{} filter := bson.D{{"_id", res.InsertedID}} if err := collection.FindOne(context.Background(), filter).Decode(&result); err != nil { fmt.Println("find failed!") log.Fatal(err) return } fmt.Printf("result: %v\n", result) }go run main.goコマンドを実行します。