すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for MongoDB:プログラムコードを使用してシャードクラスタインスタンスに接続する

最終更新日:Jun 13, 2024

ApsaraDB for MongoDBは、MongoDBプロトコルと完全に互換性があります。 このトピックでは、さまざまな言語のシャードクラスタインスタンスに接続するために使用されるサンプルコードについて説明します。

前提条件

説明

シャードクラスターインスタンスに接続するには、次のコードでreplicaSet関連のパラメーターを指定する必要はありません。

Node.js

関連リンク: MongoDB Node.js Driver

  1. クライアントで次のコマンドを実行して、プロジェクトを初期化します。

    mkdirノード-mongodb-デモ
    cdノード-mongodb-デモ
    npm init 
  2. 次のコマンドを実行して、ドライバーパッケージとツールキットをインストールします。

    npm install mongodb node-uuid sprintf-js
  3. ApsaraDB for MongoDBインスタンスへの接続に使用される情報を取得します。

  4. 次のNode.jsサンプルコードを使用します。

    const sprintf = require("sprintf-js").sprintf;
    const MongoClient = require('mongodb').MongoClient;
    const host1 = "dds-********** .mongodb.rds.aliyuncs.com";
    const port1 = 3717;
    const host2 = "dds-********** .mongodb.rds.aliyuncs.com";
    constポート2 = 3717;
    const username = "root";
    const password = "*********";
    // const replSetName = "mgset-**********";
    const demoDb = "テスト";
    const demoColl = "testColl";
    // 高可用性を確保するために、シャードクラスターの接続文字列を使用することを推奨します。 
    const url = sprintf("mongodb:// % s:% s @ % s:% d、% s:% d/admin" 、
            ユーザー名、パスワード、host1、port1、host2、port2);
    console.info("url:" 、url);
    const client = new MongoClient(url);
    // MongoClientを取得します。 
    async関数run() {
        try {
            // スタンドアロンインスタンスに接続します。 
            await client.connect();
            // データベースハンドルを取得します。 
            const database = client.db(demoDb);
            // collection ハンドルを取得します。 
            const collection = database.collection(demoColl);
            const demoName = "デモ用ノード";
            const doc = { "DEMO": demoName、"MESG": "Hello AliCoudDB For MongoDB" };
            console.info("ready insert document: ", doc);
            // データを挿入します。 
            const result = await collection.insertOne(doc);
            console.log (
                '_id: ${result.insertedId} でドキュメントが挿入されました' 、
            );
            // データを読み取ります。 
            const filter = { "DEMO": demoName };
            const findResult = await collection.find (フィルター);
            await findResult.forEach(console.dir);
          } 最後に{
              // 接続を閉じます。 
              await client.close();
          }
    }
    run().catch(console.dir); 

PHP

関連リンク: MongoDB PHP Driver

  1. Install the driver package and toolkit.

    $ pecl install mongodb
    $echo "extension=mongodb.so" >> 'php -- ini | grep "Loaded Configuration" | sed -e "s |.*:\s * |"'
    $composerには "mongodb/mongodb=^ 1.0.0" 
    が必要です
  2. ApsaraDB for MongoDBインスタンスへの接続に使用される情報を取得します。

  3. 次のPHPサンプルコードを使用します。

    <?php
    'vendor/autoload.php' が必要です。// Composerグッズを含める
    # インスタンス情報を指定します。 
    $demo_seed1 = '********* .mongodb.test.aliyun-inc.com:3717';
    $demo_seed2 = '********* .mongodb.test.aliyun-inc.com:3717';
    $demo_replname = "mgset-**********";
    $demo_user = 'root';
    $demo_password = '**********';
    $demo_db = 'admin';
    # インスタンス情報に基づいてMongoDB接続文字列を作成します。 
    # mongodb://[username:password @]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[データベース][? オプション]]
    $demo_uri = 'mongodb:// 'です。 $demo_user。 ':' . $demo_passwordです。 '@' .
        $demo_seed1 . ',' . $demo_seed2です。 '/' . $demo_db;
    $client = new MongoDB\Client($demo_uri);
    $collection = $client->testDb->testColl;
    $result = $collection->insertOne(['name' => 'ApsaraDB for Mongodb', 'desc' => 'Hello, Mongodb']);
    echo "オブジェクトIDで挿入されます '{$result->getInsertedId()}'", "\n";
    $result = $collection->find(['name' => 'ApsaraDB for Mongodb']);
    foreach ($entryとして $result) {
        echo $entry->_id, ': ', $entry->name, "\n";
    }
    ?> 

Java

関連リンク:

  1. ApsaraDB for MongoDB インスタンスに接続するために必要な情報を取得します。

  2. 次の Java サンプルコードを使用します。

    • Maven設定

      <dependencies>
          <dependency>
              <groupId>org.mongodb</groupId>
              <artifactId>mongo-java-driver</artifactId>
              <version>3.12.10</version>
          </dependency>
      </dependencies> 
    • Java code

      パッケージmongodb;
      java.util.ArrayListをインポートします。java.util.Listをインポートします。java.util.UUIDをインポートします。org.bson.BsonDocumentをインポートします。org.bson.BsonStringをインポートします。org.bson.Documentをインポートします。import com.mo ngodb.MongoClient;
      import com.mo ngodb.MongoClientOptions;
      com.mo ngodb.MongoClientURIをインポートします。import com.mo ngodb.MongoCredential;
      com.mo ngodb.ServerAddressをインポートします。com.mo ngodb.client.MongoCollectionをインポートします。com.mo ngodb.client.MongoCursorをインポートします。com.mo ngodb.client.MongoDatabaseをインポートします。public class shardingConnectTest {
          public static ServerAddress seed1 = new ServerAddress("11.238.XX.XX." 、
                  3717);
          public static ServerAddress seed2 = new ServerAddress("11.238.XX.XX." 、
                  3717);
          public static String username = "autotest";
          public static String password = "autotest";
      // public static String replSetName = "mgset-***********";
          public static String DEFAULT_DB = "admin";
          public static String DEMO_DB = "test";
          public static String DEMO_COLL = "testColl";
      
      
          public static MongoClient createMongoDBClient() {
              // seed リストを構築します。
              List<ServerAddress> seedList = new ArrayList<ServerAddress>();
              seedList.add(seed1);
              seedList.add(seed2);
              // 認証情報を作成します。
              List<MongoCredential> credentials = new ArrayList<MongoCredential>();
              credentials.add(MongoCredential.createScramSha1Credential(username, DEFAULT_DB,
                      password.toCharArray()));
              // 操作オプションを構築します。 Configure options other than requiredReplicaSetName based on your actual requirements. ほとんどのシナリオでは、デフォルトのパラメーター設定で十分です。
              MongoClientOptions options = MongoClientOptions.builder().socketTimeout(2000).connectionsPerHost(1).build();
              return new MongoClient(seedList, credentials, options);
          }
      
          public static MongoClient createMongoDBClientWithURI() {
              // MongoClient を初期化するために URI を使用します。
              // mongodb://[username:password @]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[データベース][? オプション]]
              MongoClientURI connectionString = new MongoClientURI("mongodb://" + username + ":" + password + "@"
                      + seed1 + "、" + seed2 + "/" + DEFAULT_DB);
              return new MongoClient(connectionString);
          }
          public static void main(String args[]) {
              MongoClient client = createMongoDBClientWithURI();
              try {
                  // collection ハンドルを取得します。
                  MongoDatabase database = client.getDatabase(DEMO_DB);
                  MongoCollection<Document> collection = database.getCollection(DEMO_COLL);
                  // データを挿入します。
                  Document doc = new Document();
                  String demoname = "JAVA:" + UUID.randomUUID();
                  doc.append("DEMO", demoname);
                  doc.append("MESG", "Hello AliCoudDB For MongoDB");
                  collection.insertOne(doc);
                  System.out.println("insert document: " + doc);
                  // データを読み取ります。
                  BsonDocument filter = new BsonDocument();
                  filter.append("DEMO", new BsonString(demoname));
                  MongoCursor<Document> cursor = collection.find(filter).iterator();
                  while (cursor.hasNext()) {
                      System.out.println("find document: " + cursor.next());
                  }
              } 最後に{
                  // クライアントをオフにしてリソースを解放します。
                  client.close();
              }
              戻る;
          }
      }

Python

関連リンク: pymongo 4.1.1

  1. PyMongo をインストールします。

    pip3インストールpymongo
  2. ApsaraDB for MongoDBインスタンスへの接続に使用される情報を取得します。

  3. 次のPythonサンプルコードを使用します。

    import sys
    pymongoインポートからMongoClient
    uri = 'mongodb:// % s:% s @ dds-bp18365e467ea5c4 **** .mongodb.rds.aliyuncs.com:3717/admin'
    username = 'root'
    password = 'MongoDB ****'
    client = MongoClient(uri % (ユーザー名、パスワード))
    ret = client.admin.com mand('ping')['ok']
    if ret:
        プリント (「pingに成功! 」)
    else:
        印刷 (「pingに失敗しました! 」)
        sys.exit (1)
    
    db=クライアント ['baz']
    coll = db['quz']
    uuid = coll.insert_one({'hello': 'world'}).inserted_id
    プリント ('Id: % s' % uuid)
    ret = coll.find_one({"_id": uuid})
    プリント (ret) 

C#

関連リンク: MongoDB C# Driver

  1. 次のコマンドを実行して、ドライバーパッケージをインストールします。

    インストール-パッケージmongocsharpdriver
  2. ApsaraDB for MongoDBインスタンスへの接続に使用される情報を取得します。

  3. 次のC# サンプルコードを使用します。

    MongoDB.Driverの使用
    
    システムを使用して;
    System.Collections.Generic; の使用
    
    名前空間Aliyun
    {
        class Program
        {
            static void Main(string[] args)
            {
                // インスタンス情報を指定します。 
                const文字列host1 = "dds-t4n *************** .mongodb.singapore.rds.aliyuncs.com";
                const int port1 = 3717;
                const文字列host2 = "dds-t4n *************** .mongodb.singapore.rds.aliyuncs.com";
                const int port2 = 3717;
                const文字列replicaSetName = "mgset-300 ******";
                const文字列admin = "admin";
                const文字列userName = "root";
                const string passwd = "********";
    
                try
                {
                    Console.WriteLine("connecting...")
                    MongoClientSettings settings=新しいMongoClientSettings();
                    リスト <MongoServerAddress> servers = newリスト <MongoServerAddress>();
                    サーバー追加 (新しいMongoServerAddress(host1, port1));
                    サーバー追加 (新しいMongoServerAddress(host2、port2));
                    サーバー=サーバー;
                    // ReplicaSetNameを設定します。 
                    設定。ReplicaSetName = replicaSetName;
                    // タイムアウト時間を3秒に設定します。 
                    設定。ConnectTimeout = new TimeSpan(0、0、0、0、3、0);
                    MongoCredential資格情報=MongoCredential.CreateCredential(admin, userName, passwd);
                    settings.Credential=資格情報;
                    MongoClientクライアント=新しいMongoClient (設定);
                    var server = client.GetServer();
                    MongoDatabase database = server.GetDatabase("test");
                    var collection = database.GetCollection <ユーザー>("test_collection");
                    User user = new User();
                    user.id = "1";
                    user.name = "mongo_test";
                    user.sex = "female";
                    // データユーザーを挿入します。 
                    collection.Insert (ユーザー);
                    // データエントリを取得します。 
                    User result = collection.FindOne();
                    Console.WriteLine("id:" + result.id + "name:" + result.name + "sex:" + result.sex);
                    Console.WriteLine("connection successful...");
                }
                catch (Exception e)
                {
                    Console.WriteLine("connection failed:" + e. メッセージ);
    
                }
            }
        }
        クラスUser
        {
            public string id { set; get; }
            パブリック文字列名 {set; get; }
            public string sex { set; get; }
    
        }
    }

Go

関連リンク: MongoDB Go Driver

  1. 次のドライバーパッケージをインストールします。

    go ge t go.mongodb.org/mongo-driver
  2. ApsaraDB for MongoDBインスタンスに接続するために必要な情報を取得します。

  3. 次のGoサンプルコードを使用します。

    パッケージメイン
    
    import (import (import)
        「コンテキスト」
        "fmt"
        「go.mongodb.org/mongo-driver/bson」
        「go.mongodb.org/mongo-driver/mongo」
        「go.mongodb.org/mongo-driver/mongo/options」
        「go.mongodb.org/mongo-driver/mongo/readconcern」
        「go.mongodb.org/mongo-driver/mongo/readpref」
        「go.mongodb.org/mongo-driver/mongo/writeconcern」
        「ログ」
    )
    
    func main() {
        // MongoDBサーバーにクライアントを作成し、Pingを使用して
        // サーバーが実行中です。
    
        clientOpts := options.Client().ApplyURI("mongodb:// root:**** @ s-bp1 ******* .mongodb.rds.aliyuncs.com:3717、s-bp2 ******* .mongodb.rds.aliyuncs.com:3717/admin")
        clientOpts.SetReadPreference(readpref.PrimaryPreferred())
        clientOpts.SetWriteConcern (writecocern. New (writecocern. WMajority(), writecocern. J(true), writecocern. WTimeout(1000)))
        client, err := mongo.Connect(context.TODO(), clientOpts)
        if err! =nil {
            fmt.Println("connect failed!")
            log.Fatal(err)
            リターン
        }
        fmt.Println("connect successful!")
    
        defer func() {
            if err = client.Disconnect(context.TODO()); err! =nil {
                fmt.Println("切断に失敗しました!")
                log.Fatal(err)
            }
            fmt.Println("切断成功!")
        }()
    
        // Pingを呼び出して、デプロイが有効でクライアントが有効であることを確認します。
        // 正常に設定されました。 Pingのドキュメントで述べたように、この
        // サーバーが一時的に存在する可能性があるため、アプリケーションの復元力が低下します
        // Pingが呼び出されたときは利用できません。
        if err = client.Ping(context.TODO(), nil); err! =nil {
            fmt.Println("ping failed!")
            log.Fatal(err)
            リターン
        }
        fmt.Println("ping successful!")
    
        // DefaultReadConcernオプションを指定して、トランザクションが開始されるようにします。
        // セッションには読み取り懸念の過半数があります。
        // DefaultReadPreferenceオプションとDefaultWriteConcernオプションはありません
        // クライアントからinheritiedされ、プライマリに設定されるように指定します
        // と過半数。
        opts := options.Session().SetDefaultReadConcern(readcon. Majority())
        sess, err := client.StartSession(opts)
        if err! =nil {
            fmt.Println("セッションの開始に失敗しました!")
            log.Fatal(err)
            リターン
        }
        defer func() {
            sess.EndSession(context.TODO())
            fmt.Println("end session!")
        }()
        fmt.Println("セッションの開始が成功!")
    
        txnOpts := options.Transaction()
        result, err := sess.WithTransaction (
            context.TODO(),
            func(sessCtx mongo.SessionContext) (インターフェイス {}, error) {
                collection := client.Database("baz").Collection("qux")
                res, err := collection.InsertMany(context.Background(), []interface {}{ bson.M{"shardkey": 0}, bson.M{"shardkey": 1}, bson.M{"shardkey": 2}})
                if err! =nil {
                    fmt.Println("結果の挿入に失敗しました!")
                    log.Fatal(err)
                    リターンnil, err
                }
                id := res.InsertedIDs
                fmt.Println("id:", id)
                fmt.Printf("insert result: % v\n", res)
    
                結果:= bson.M{}
                フィルター:= bson.D{{"shardkey", 0}}
                if err := collection.FindOne(context.Background(), filter).Decode(&result); err! =nil {
                    fmt.Println("found failed!")
                    log.Fatal(err)
                    リターンnil, err
                }
                return result, err
            },
            txnOpts)
        if err == nil {
            fmt.Printf("result: % v\n", result)
        }
    }