連接外部應用程式

您的應用程式及驅動程式會使用連線字串來建立與 IBM Cloud® Databases for MongoDB的連線。 每一個部署都有專用的驅動程式和應用程式連線字串。 連線字串會顯示在部署 概觀端點 畫面中,也可以從 Cloud Databases CLI 外掛程式Cloud Databases API 中擷取。

您在部署中建立的任何使用者都可以使用連線字串。 雖然您可以將管理使用者用於所有連線及應用程式,但最好特別為您要連接的應用程式建立使用者。 有關更多信息,請參閱 取得連接字串

連接外部應用程式時,僅使用支援的驅動程式 MongoDB或者 MongoDB's特色社區支持圖書館。Cloud Databases不支援任何不支援的驅動程式MongoDB。

使用連接資訊

驅動程式連接到您的部署所需的所有資訊都位於"MongoDB"在上建立的憑證的部分服務憑證頁。 表格包含參照的明細。

mongodb/URI 連線訊息
欄位名稱 索引 說明
Type 連接類型 - 用於MongoDB,它是“URI”
Scheme URI 方案 - 用於MongoDB,它是“mongodb”
Path URI 的路徑 - 用於MongoDB,它是資料庫名稱。 第一次佈建 MongoDB 實例時,使用者要連接的預設資料庫為 admin
Authentication Username 您用來連接的使用者名稱。
Authentication Password 使用者的密碼-可能顯示為 $PASSWORD
Authentication Method 如何進行鑑別; 由驅動程式處理「直接」鑑別。 Mongo 3.6 使用 SCRAM SHA 1,而 Mongo 4.2 使用 SHA 256
Hosts 0... 要連接的主機名稱及埠
Composed 0... 結合「架構」、「鑑別」、「主機」、「路徑」及「抄本集」名稱的 URI。
Certificate Name 用於資料庫部署的服務專屬憑證的已分配名稱
Certificate Base64 憑證的 base64 編碼版本。
  • 0... 表示陣列中可能有一或多個這些項目。

當給定在連接資訊的「composed」欄位中找到的 URI 格式的連接字串時,許多MongoDB驅動程式都能夠連接到您的部署。Cloud Databases提供高度可用的MongoDB,因此請確保在連接字串中包含所有成員。 例如:

mongodb://admin:$PASSWORD@d5eeee66-5bc4-498a-b73b-1307848f1eac.8f7bfd8f3faa4218aec56e069eb46187-0.databases.appdomain.cloud:30484,d5eeee66-5bc4-498a-b73b-1307848f1eac.8f7bfd8f3faa4218aec56e069eb46187-1.databases.appdomain.cloud:30484,d5eeee66-5bc4-498a-b73b-1307848f1eac.8f7bfd8f3faa4218aec56e069eb46187-2.databases.appdomain.cloud:30484/<database name>?authSource=admin&replicaSet=replset

replicaSet 查詢參數包含部署的抄本集名稱。 它可能是 replset。 部分驅動程式及應用程式需要個別傳入。

下列範例使用連線字串及 MongoDB Java 驅動程式 中的資訊來連接至資料庫。

public class MongodbConnect {
    private static Logger log = LoggerFactory.getLogger(LoggerFactory.class);

    public static void main(String[] args) {

        System.setProperty("javax.net.ssl.trustStore", "path/to/keystore");
        System.setProperty("javax.net.ssl.trustStorePassword", "store_password");

        // make sure you append ssl=true to the connection URI
        final String mongoURI = "mongodb://user:password@host:port,host:port/?authSource=admin&replicaSet=replset&ssl=true";

        MongoClient mongoClient = MongoClients.create(mongoURI);
        boolean testDB = false;

        // this loop will continue attempting to connect to the database until the admin database is found
        while (!testDB) {
            try {
                // check if you can connect to the database by checking for
                // the presence of the admin database. If the admin databases isn't found
                // then you're not connected.
                MongoIterable<String> databases = mongoClient.listDatabaseNames();
                for (String name: databases) {
                    if (name.contains("admin")) {
                        System.out.println("admin found...");
                        testDB = true;
                    }
                }
            } catch (Exception e) {
                log.info(e.getMessage());
            }
        }

        // close connection
        mongoClient.close();

    }
}

下一個範例會使用連線字串及 Python 驅動程式 pymongo 中的資訊來連接至資料庫。 這只是簡單的連線範例,沒有錯誤處理或重試邏輯,可能不適用於正式作業。

import pymongo
from pymongo import MongoClient
from pymongo.errors import ConnectionFailure


client = MongoClient(
    "mongodb://admin:$PASSWORD@host.databases.appdomain.cloud:30484/<database name>?authSource=adminreplicaSet=replset",
    ssl=True,
    ssl_ca_certs="/path/to/cert/ca-certificate.crt"
)

try:
    db_list = client.list_database_names()
    print("List of databases:")
    print(db_list)

except ConnectionFailure as err:
    print("Unable to connect to database")

此最終範例使用 MongoDB Node.js 驅動程式

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

let connectionString = "mongodb://<username>:<password>@<host>:<port>,<host>:<port>/<database>?authSource=admin&replicaSet=replset";

let options = {
    tls: true,
    tlsCAFile: `/path/to/cert`,
    useUnifiedTopology: true
};

// connects to a MongoDB database
MongoClient.connect(connectionString, options, function (err, db) {
    if (err) {
        console.log(err);
    } else {
       // lists the databases that exist in the deployment
        db.db('example').admin().listDatabases(function(err, dbs) {
            console.log(dbs.databases);
            db.close();
        });
    }
});

驅動程式 TLS 和服務專屬憑證支援

Databases for MongoDB 的所有連線都已啟用 TLS 1.2,因此您用來連接的驅動程式需要能夠支援加密。

Databases for MongoDB Enterprise Edition支援下列 密碼組合:

  • ECDHE-ECDSA-AES128-GCM-SHA256
  • ECDHE-RSA-AES128-GCM-SHA256
  • ECDHE-ECDSA-AES256-GCM-SHA384
  • ECDHE-RSA-AES256-GCM-SHA384
  • ECDHE-ECDSA-CHACHA20-POLY1305
  • ECDHE-RSA-CHACHA20-POLY1305
  • DHE-RSA-AES128-GCM-SHA256
  • DHE-RSA-AES256-GCM-SHA384

您的部署還隨附服務專屬憑證,因此驅動程式可以在連線時驗證伺服器。

如需相關資訊,請參閱 Cloud Databases 憑證常見問題(FAQ)

使用服務專屬憑證

  1. 端點 畫面或連線資訊的 Base64 欄位複製憑證資訊。
  2. 必要的話,請將 Base64 字串解碼為文字。
  3. 將憑證儲存至檔案。 (您可以使用所提供的「名稱」或您自己的檔名)。*
  4. 提供驅動程式或用戶端的憑證路徑。

*為了MacOS,確保您已將憑證匯入信任儲存區,並將憑證標記為 trust always

CLI 外掛程式支援服務專屬憑證

您可以使用指令 ibmcloud cdb deployment-cacert "your-service-name",使用 CLI 外掛程式來顯示部署的已解碼憑證。 它會將 base64 解碼成文字。 將指令的輸出複製並儲存至檔案,並提供檔案的驅動程式路徑。

其他語言驅動程式

MongoDB 擁有大量的語言驅動程式。 此表格涵蓋一些最常見的語言驅動程式。 如果您要尋找更多語言,請嘗試 MongoDB.org Driver List