

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Entwickeln mit Amazon DocumentDB
<a name="documentdb-development"></a>

In diesen Abschnitten wird die Entwicklung mit Amazon DocumentDB behandelt.

**Topics**
+ [Mit DocumentDB Connect](connect-docdb.md)
+ [Programm mit DocumentDB](program-docdb.md)

# Connect zu Amazon DocumentDB her
<a name="connect-docdb"></a>

Amazon DocumentDB bietet mehrere Verbindungsoptionen, darunter programmatische Verbindungen mithilfe von MongoDB-Treibern, Verbindungen von außerhalb einer VPC über SSH-Tunneling oder AWS VPN sowie beliebte Tools wie Studio 3T und. DataGrip Der Service unterstützt Verbindungen mit Replikatgruppen für hohe Verfügbarkeit. Für Analysen und Berichte können Sie mithilfe von JDBC- oder ODBC-Treibern eine Verbindung herstellen. EC2 Instanzen in derselben VPC können sich direkt mit DocumentDB-Clustern verbinden. Alle Verbindungen erfordern TLS und die richtigen AWS Anmeldeinformationen/Authentifizierung.

**Topics**
+ [Programmgesteuert eine Verbindung herstellen](connect_programmatically.md)
+ [Verbindung von außerhalb einer Amazon VPC herstellen](connect-from-outside-a-vpc.md)
+ [Als Replikatsatz eine Verbindung herstellen](connect-to-replica-set.md)
+ [Connect mit Studio 3T her](studio3t.md)
+ [Connect mit DataGrip](data-grip-connect.md)
+ [Stellen Sie mithilfe von Amazon EC2 eine Verbindung her](connect-ec2.md)
+ [Stellen Sie mithilfe des JDBC-Treibers eine Verbindung her](connect-jdbc.md)
+ [Stellen Sie mithilfe des ODBC-Treibers eine Verbindung her](connect-odbc.md)

# Programmgesteuertes Herstellen einer Verbindung zu Amazon DocumentDB
<a name="connect_programmatically"></a>

Dieser Abschnitt enthält Codebeispiele, die zeigen, wie Sie mithilfe verschiedener Sprachen eine Verbindung zu Amazon DocumentDB (mit MongoDB-Kompatibilität) herstellen können. Die Beispiele sind in zwei Abschnitte unterteilt: Verbindung mit einem Cluster mit und ohne aktiviertem TLS (Transport Layer Security). Standardmäßig ist TLS auf Amazon DocumentDB-Clustern aktiviert. Sie können TLS jedoch bei Bedarf deaktivieren. Weitere Informationen finden Sie unter [Verschlüsseln von Daten während der Übertragung](security.encryption.ssl.md). 

Wenn Sie versuchen, von außerhalb der VPC, in der sich Ihr Cluster befindet, eine Verbindung zu Ihrer Amazon DocumentDB herzustellen, lesen Sie bitte [Von außerhalb einer Amazon VPC eine Verbindung zu einem Amazon DocumentDB-Cluster herstellen](connect-from-outside-a-vpc.md). 

Bevor Sie sich mit Ihrem Cluster verbinden, müssen Sie wissen, ob TLS auf dem Cluster aktiviert ist. Der nächste Abschnitt zeigt Ihnen, wie Sie den Wert des Parameters `tls` Ihres Clusters mit der AWS-Managementkonsole oder der AWS CLI bestimmen können. Danach können Sie fortfahren, indem Sie das entsprechende Codebeispiel anwenden.

**Topics**
+ [

## Ermitteln Sie den Wert Ihres Parameters `tls`
](#connect_programmatically-determine_tls_value)
+ [

## Verbindung bei aktiviertem TLS herstellen
](#connect_programmatically-tls_enabled)
+ [

## Verbindung bei deaktiviertem TLS herstellen
](#connect_programmatically-tls_disabled)

## Ermitteln Sie den Wert Ihres Parameters `tls`
<a name="connect_programmatically-determine_tls_value"></a>

Die Feststellung, ob TLS in Ihrem Cluster aktiviert ist, ist ein zweistufiger Prozess, den Sie entweder mit AWS-Managementkonsole oder AWS CLI durchführen können.

1. **Bestimmen Sie, welche Parametergruppe Ihren Cluster steuert.**

------
#### [ Using the AWS-Managementkonsole ]

   1. Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die Amazon DocumentDB DocumentDB-Konsole unter [https://console.aws.amazon.com/docdb](https://console.aws.amazon.com/docdb).

   1. Wählen Sie im linken Navigationsbereich **Cluster** aus.

   1. Wählen Sie in der Liste der Cluster den Namen des Clusters aus.

   1. Auf der anschließend angezeigten Seite werden die Details des von Ihnen ausgewählten Clusters angezeigt. Wählen Sie die Registerkarte **Configuration** aus. Suchen Sie im Abschnitt **Konfigurationen und Status** den Namen der Parametergruppe unter **Cluster-Parametergruppe**.

------
#### [ Using the AWS CLI ]

   Der folgende AWS CLI Code bestimmt, welcher Parameter Ihren Cluster steuert. Ersetzen Sie *`sample-cluster`* durch den Namen Ihres Clusters.

   ```
   aws docdb describe-db-clusters \
       --db-cluster-identifier sample-cluster \
       --query 'DBClusters[*].[DBClusterIdentifier,DBClusterParameterGroup]'
   ```

   Die Ausgabe dieser Operation sieht in etwa wie folgt aus:

   ```
   [
          [
              "sample-cluster",
              "sample-parameter-group"
          ]
   ]
   ```

------

1. **Bestimmen Sie den Wert des Parameters `tls` in der Parametergruppe Ihres Clusters**.

------
#### [ Using the AWS-Managementkonsole ]

   1. Wählen Sie im Navigationsbereich **Parameter groups (Parametergruppen)** aus.

   1. Wählen Sie im Fenster **Cluster-Parametergruppen** den Namen Ihrer Cluster-Parametergruppe aus Schritt 1d aus.

   1. Auf der Ergebnisseite werden die Parameter der Cluster-Parametergruppe angezeigt. Hier können Sie den Wert des `tls`-Parameters sehen. Informationen zum Ändern dieses Parameters finden Sie unter [Amazon DocumentDB-Cluster-Parametergruppen ändern](cluster_parameter_groups-modify.md).

------
#### [ Using the AWS CLI ]

   Sie können den `describe-db-cluster-parameters` AWS CLI Befehl verwenden, um die Details der Parameter in Ihrer Cluster-Parametergruppe anzuzeigen.
   + **`--describe-db-cluster-parameters`**— Um alle Parameter innerhalb einer Parametergruppe und ihre Werte aufzulisten.
     + **`--db-cluster-parameter-group name`** – Erforderlich. Der Name Ihrer Cluster-Parametergruppe.

   Ersetzen Sie in den folgenden Beispielen jeden *user input placeholder* durch die Informationen Ihres Clusters.

   ```
   aws docdb describe-db-cluster-parameters \
       --db-cluster-parameter-group-name sample-parameter-group
   ```

   Die Ausgabe dieser Operation sieht in etwa wie folgt aus: 

   ```
   {
           "Parameters": [
               {
                   "ParameterName": "profiler_threshold_ms",
                   "ParameterValue": "100",
                   "Description": "Operations longer than profiler_threshold_ms will be logged",
                   "Source": "system",
                   "ApplyType": "dynamic",
                   "DataType": "integer",
                   "AllowedValues": "50-2147483646",
                   "IsModifiable": true,
                   "ApplyMethod": "pending-reboot"
               },
               {
                   "ParameterName": "tls",
                   "ParameterValue": "disabled",
                   "Description": "Config to enable/disable TLS",
                   "Source": "user",
                   "ApplyType": "static",
                   "DataType": "string",
                   "AllowedValues": "disabled,enabled,fips-140-3",
                   "IsModifiable": true,
                   "ApplyMethod": "pending-reboot"
               }
           ]
   }
   ```

**Anmerkung**  
Amazon DocumentDB unterstützt FIPS 140-3-Endpunkte, beginnend mit Amazon DocumentDB 5.0-Clustern (Engine-Version 3.0.3727) in diesen Regionen: ca-central-1, us-west-2, us-east-1, us-east-2, -1, -1. us-gov-east us-gov-west

------

Nachdem Sie den Wert des `tls`-Parameters bestimmt haben, fahren Sie mit dem Herstellen einer Verbindung zu Ihrem Cluster fort, indem Sie eines der Codebeispiele in den folgenden Abschnitten verwenden.
+ [Verbindung bei aktiviertem TLS herstellen](#connect_programmatically-tls_enabled) 
+ [Verbindung bei deaktiviertem TLS herstellen](#connect_programmatically-tls_disabled) 

## Verbindung bei aktiviertem TLS herstellen
<a name="connect_programmatically-tls_enabled"></a>

Um ein Codebeispiel für die programmgesteuerte Verbindung zu einem TLS-fähigen Amazon DocumentDB-Cluster anzuzeigen, wählen Sie die entsprechende Registerkarte für die Sprache, die Sie verwenden möchten.

Um Daten während der Übertragung zu verschlüsseln, laden Sie den öffentlichen Schlüssel für Amazon DocumentDB `global-bundle.pem` mit dem folgenden Vorgang herunter.

```
wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
```

Wenn Ihre Anwendung unter Microsoft Windows läuft und eine PKCS7 Datei benötigt, können Sie das PKCS7 Zertifikatspaket herunterladen. Dieses Paket enthält sowohl die Zwischen- als auch die Stammzertifikate unter [https://truststore.pki.rds.amazonaws.com/global/global-bundle.p7b](https://truststore.pki.rds.amazonaws.com/global/global-bundle.p7b).

------
#### [ Python ]

Der folgende Code zeigt, wie Sie mit Python eine Verbindung zu Amazon DocumentDB herstellen, wenn TLS aktiviert ist.

Ersetzen Sie im folgenden Beispiel jede *user input placeholder* durch die Informationen Ihres Clusters.

```
import pymongo
import sys

##Create a MongoDB client, open a connection to Amazon DocumentDB as a replica set and specify the read preference as secondary preferred
client = pymongo.MongoClient('mongodb://sample-user:password@sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false') 

##Specify the database to be used
db = client.sample_database

##Specify the collection to be used
col = db.sample_collection

##Insert a single document
col.insert_one({'hello':'Amazon DocumentDB'})

##Find the document that was previously written
x = col.find_one({'hello':'Amazon DocumentDB'})

##Print the result to the screen
print(x)

##Close the connection
client.close()
```

------
#### [ Node.js ]

Der folgende Code zeigt, wie Sie mit Node.js eine Verbindung zu Amazon DocumentDB herstellen, wenn TLS aktiviert ist.

**Wichtig**  
Es gibt eine bekannte Einschränkung bei Treibern von Node.js, die älter als Version 6.13.1 sind und die derzeit nicht von der IAM-Identitätsauthentifizierung für Amazon DocumentDB unterstützt werden. Die Treiber und Tools der Datei Node.js, die den Treiber Node.js verwenden (z. B. mongosh), müssen aktualisiert werden, sodass sie den Treiber Node.js der Version 6.13.1 oder höher verwenden.

Ersetzen Sie im folgenden Beispiel jeden durch die Informationen *user input placeholder* Ihres Clusters.

```
var MongoClient = require('mongodb').MongoClient

//Create a MongoDB client, open a connection to DocDB; as a replica set,
//  and specify the read preference as secondary preferred

var client = MongoClient.connect(
'mongodb://sample-user:password@sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/sample-database?tls=true&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false',
{
  tlsCAFile: `global-bundle.pem` //Specify the DocDB; cert
},
function(err, client) {
    if(err)
        throw err;

    //Specify the database to be used
    db = client.db('sample-database');

    //Specify the collection to be used
    col = db.collection('sample-collection');

    //Insert a single document
    col.insertOne({'hello':'Amazon DocumentDB'}, function(err, result){
      //Find the document that was previously written
      col.findOne({'hello':'Amazon DocumentDB'}, function(err, result){
        //Print the result to the screen
        console.log(result);

        //Close the connection
        client.close()
      });
   });
});
```

------
#### [ PHP ]

Der folgende Code zeigt, wie Sie mit PHP eine Verbindung zu Amazon DocumentDB herstellen, wenn TLS aktiviert ist.

Ersetzen Sie im folgenden Beispiel jede *user input placeholder* durch die Informationen Ihres Clusters.

```
<?php
//Include Composer's autoloader
require 'vendor/autoload.php';

$TLS_DIR = "/home/ubuntu/global-bundle.pem";

//Create a MongoDB client and open connection to Amazon DocumentDB
$client = new MongoDB\Client("mongodb://sample-user:password@sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/?retryWrites=false", ["tls" => "true", "tlsCAFile" => $TLS_DIR ]);

//Specify the database and collection to be used
$col = $client->sampledatabase->samplecollection;

//Insert a single document
$result = $col->insertOne( [ 'hello' => 'Amazon DocumentDB'] );

//Find the document that was previously written
$result = $col->findOne(array('hello' => 'Amazon DocumentDB'));

//Print the result to the screen
print_r($result);
?>
```

------
#### [ Go ]

Der folgende Code zeigt, wie Sie mit Go eine Verbindung zu Amazon DocumentDB herstellen, wenn TLS aktiviert ist.

**Anmerkung**  
Ab Version 1.2.1 verwendet der MongoDB Go Driver nur das erste CA-Serverzertifikat, das in `sslcertificateauthorityfile` gefunden wurde. Der folgende Beispielcode behebt diese Einschränkung, indem alle in `sslcertificateauthorityfile` gefundenen Serverzertifikate manuell an eine benutzerdefinierte TLS-Konfiguration angehängt werden, die während der Client-Erstellung verwendet wird. 

Ersetzen Sie in den folgenden Beispielen jedes Beispiel *user input placeholder* durch die Informationen Ihres Clusters.

```
package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"

	"io/ioutil"
	"crypto/tls"
	"crypto/x509"
	"errors"
)

const (
	// Path to the AWS CA file
	caFilePath = "global-bundle.pem"

	// Timeout operations after N seconds
	connectTimeout  = 5
	queryTimeout    = 30
	username        = "sample-user"
	password        = "password"
	clusterEndpoint = "sample-cluster.node.us-east-1.docdb.amazonaws.com:27017"

	// Which instances to read from
	readPreference = "secondaryPreferred"

	connectionStringTemplate = "mongodb://%s:%s@%s/sample-database?tls=true&replicaSet=rs0&readpreference=%s"
)

func main() {

	connectionURI := fmt.Sprintf(connectionStringTemplate, username, password, clusterEndpoint, readPreference)

	tlsConfig, err := getCustomTLSConfig(caFilePath)
	if err != nil {
		log.Fatalf("Failed getting TLS configuration: %v", err)
	}

	client, err := mongo.NewClient(options.Client().ApplyURI(connectionURI).SetTLSConfig(tlsConfig))
	if err != nil {
		log.Fatalf("Failed to create client: %v", err)
	}

	ctx, cancel := context.WithTimeout(context.Background(), connectTimeout*time.Second)
	defer cancel()

	err = client.Connect(ctx)
	if err != nil {
		log.Fatalf("Failed to connect to cluster: %v", err)
	}

	// Force a connection to verify our connection string
	err = client.Ping(ctx, nil)
	if err != nil {
		log.Fatalf("Failed to ping cluster: %v", err)
	}

	fmt.Println("Connected to DocumentDB!")

	collection := client.Database("sample-database").Collection("sample-collection")

	ctx, cancel = context.WithTimeout(context.Background(), queryTimeout*time.Second)
	defer cancel()

	res, err := collection.InsertOne(ctx, bson.M{"name": "pi", "value": 3.14159})
	if err != nil {
		log.Fatalf("Failed to insert document: %v", err)
	}

	id := res.InsertedID
	log.Printf("Inserted document ID: %s", id)

	ctx, cancel = context.WithTimeout(context.Background(), queryTimeout*time.Second)
	defer cancel()

	cur, err := collection.Find(ctx, bson.D{})

	if err != nil {
		log.Fatalf("Failed to run find query: %v", err)
	}
	defer cur.Close(ctx)

	for cur.Next(ctx) {
		var result bson.M
		err := cur.Decode(&result)
		log.Printf("Returned: %v", result)

		if err != nil {
			log.Fatal(err)
		}
	}

	if err := cur.Err(); err != nil {
		log.Fatal(err)
	}

}

func getCustomTLSConfig(caFile string) (*tls.Config, error) {
	tlsConfig := new(tls.Config)
	certs, err := ioutil.ReadFile(caFile)

	if err != nil {
		return tlsConfig, err
	}

	tlsConfig.RootCAs = x509.NewCertPool()
	ok := tlsConfig.RootCAs.AppendCertsFromPEM(certs)

	if !ok {
		return tlsConfig, errors.New("Failed parsing pem file")
	}

	return tlsConfig, nil
```

------
#### [ Java ]

Wenn Sie von einer Java-Anwendung aus eine Verbindung zu einem TLS-fähigen Amazon DocumentDB-Cluster herstellen, muss Ihr Programm die von AWS Ihnen bereitgestellte Zertifizierungsstelle (CA) verwenden, um die Verbindung zu validieren. Gehen Sie wie folgt vor, um das Amazon RDS-CA-Zertifikat zu verwenden:

1. Laden Sie die Amazon RDS-CA-Datei von herunter [https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem](https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem).

1. Erstellen Sie einen Vertrauensspeicher mit dem in der Datei enthaltenen CA-Zertifikat, indem Sie die folgenden Befehle ausführen. Stellen Sie sicher, dass Sie das *truststore-password* in etwas anderes ändern. Wenn Sie auf einen Vertrauensspeicher zugreifen, der sowohl das alte CA-Zertifikat (`rds-ca-2015-root.pem`) als auch das neue CA-Zertifikat (`rds-ca-2019-root.pem`) enthält, können Sie das Zertifikat-Bundle in den Vertrauensspeicher importieren. 

   Nachfolgend finden Sie ein Beispiel-Shell-Skript, das das Zertifikatpaket in einen Trust Store auf einem Linux-Betriebssystem importiert. Ersetzen Sie in den folgenden Beispielen jedes *user input placeholder * durch Ihre eigenen Informationen. Insbesondere gilt: Wo immer sich das Beispielverzeichnis *mydir* "" im Skript befindet, ersetzen Sie es durch ein Verzeichnis, das Sie für diese Aufgabe erstellt haben.

   ```
   mydir=/tmp/certs
   truststore=${mydir}/rds-truststore.jks
   storepassword=truststore-password
   
   curl -sS "https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem" > ${mydir}/global-bundle.pem
   awk 'split_after == 1 {n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1}{print > "rds-ca-" n ".pem"}' < ${mydir}/global-bundle.pem
   
   for CERT in rds-ca-*; do
     alias=$(openssl x509 -noout -text -in $CERT | perl -ne 'next unless /Subject:/; s/.*(CN=|CN = )//; print')
     echo "Importing $alias"
     keytool -import -file ${CERT} -alias "${alias}" -storepass ${storepassword} -keystore ${truststore} -noprompt
     rm $CERT
   done
   
   rm ${mydir}/global-bundle.pem
   
   echo "Trust store content is: "
   
   keytool -list -v -keystore "$truststore" -storepass ${storepassword} | grep Alias | cut -d " " -f3- | while read alias 
   do
      expiry=`keytool -list -v -keystore "$truststore" -storepass ${storepassword} -alias "${alias}" | grep Valid | perl -ne 'if(/until: (.*?)\n/) { print "$1\n"; }'`
      echo " Certificate ${alias} expires in '$expiry'" 
   done
   ```

   Es folgt ein Beispiel für ein Shell-Skript, das das Zertifikatspaket in einen Vertrauensspeicher unter macOS importiert. 

   ```
   mydir=/tmp/certs
   truststore=${mydir}/rds-truststore.jks
   storepassword=truststore-password
   
   curl -sS "https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem" > ${mydir}/global-bundle.pem
   split -p "-----BEGIN CERTIFICATE-----" ${mydir}/global-bundle.pem rds-ca-
   
   for CERT in rds-ca-*; do
     alias=$(openssl x509 -noout -text -in $CERT | perl -ne 'next unless /Subject:/; s/.*(CN=|CN = )//; print')
     echo "Importing $alias"
     keytool -import -file ${CERT} -alias "${alias}" -storepass ${storepassword} -keystore ${truststore} -noprompt
     rm $CERT
   done
   
   rm ${mydir}/global-bundle.pem
   
   echo "Trust store content is: "
   
   keytool -list -v -keystore "$truststore" -storepass ${storepassword} | grep Alias | cut -d " " -f3- | while read alias 
   do
      expiry=`keytool -list -v -keystore "$truststore" -storepass ${storepassword} -alias "${alias}" | grep Valid | perl -ne 'if(/until: (.*?)\n/) { print "$1\n"; }'`
      echo " Certificate ${alias} expires in '$expiry'" 
   done
   ```

1. Verwenden Sie das `keystore` in Ihrem Programm, indem Sie die folgenden Systemeigenschaften in Ihrer Anwendung festlegen, bevor Sie eine Verbindung zum Amazon DocumentDB-Cluster herstellen.

   ```
   javax.net.ssl.trustStore: truststore
   javax.net.ssl.trustStorePassword: truststore-password;
   ```

1. Der folgende Code zeigt, wie Sie mit Java eine Verbindung zu Amazon DocumentDB herstellen, wenn TLS aktiviert ist.

   Ersetzen Sie im folgenden Beispiel jede *user input placeholder* durch die Informationen Ihres Clusters.

   ```
   package com.example.documentdb;
   
   import com.mongodb.client.*;
   import org.bson.Document;
   
   public final class Test {
       private Test() {
       }
       public static void main(String[] args) {
   
           String template = "mongodb://%s:%s@%s/sample-database?ssl=true&replicaSet=rs0&readpreference=%s";
           String username = "sample-user";
           String password = "password";
           String clusterEndpoint = "sample-cluster.node.us-east-1.docdb.amazonaws.com:27017";
           String readPreference = "secondaryPreferred";
           String connectionString = String.format(template, username, password, clusterEndpoint, readPreference);
   
           String truststore = "truststore";
           String truststorePassword = "truststore-password";
   
           System.setProperty("javax.net.ssl.trustStore", truststore);
           System.setProperty("javax.net.ssl.trustStorePassword", truststorePassword);
   
           MongoClient mongoClient = MongoClients.create(connectionString);
   
           MongoDatabase testDB = mongoClient.getDatabase("sample-database");
           MongoCollection<Document> numbersCollection = testDB.getCollection("sample-collection");
   
           Document doc = new Document("name", "pi").append("value", 3.14159);
           numbersCollection.insertOne(doc);
   
           MongoCursor<Document> cursor = numbersCollection.find().iterator();
           try {
               while (cursor.hasNext()) {
                   System.out.println(cursor.next().toJson());
               }
           } finally {
               cursor.close();
           }
   
       }
   }
   ```

------
#### [ C\$1 / .NET ]

Der folgende Code zeigt, wie Sie mit C\$1 /.NET eine Verbindung zu Amazon DocumentDB herstellen, wenn TLS aktiviert ist.

Im folgenden Beispiel ersetzen Sie jeden *user input placeholder* durch die Informationen Ihres Clusters.

```
using System;
using System.Text;
using System.Linq;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;
using MongoDB.Driver;
using MongoDB.Bson;

namespace DocDB
{
    class Program
    {
        static void Main(string[] args)
        {
            string template = "mongodb://{0}:{1}@{2}/sampledatabase?tls=true&replicaSet=rs0&readpreference={3}";
            string username = "sample-user";
            string password = "password";
            string readPreference = "secondaryPreferred";
            string clusterEndpoint="sample-cluster.node.us-east-1.docdb.amazonaws.com:27017";
            string connectionString = String.Format(template, username, password, clusterEndpoint, readPreference);
            
            string pathToCAFile = "<PATH/global-bundle.p7b_file>";

            // ADD CA certificate to local trust store
            // DO this once - Maybe when your service starts
            X509Store localTrustStore = new X509Store(StoreName.Root);
            X509Certificate2Collection certificateCollection = new X509Certificate2Collection();
            certificateCollection.Import(pathToCAFile);
            try 
            {
                localTrustStore.Open(OpenFlags.ReadWrite);
                localTrustStore.AddRange(certificateCollection);
            } 
            catch (Exception ex) 
            {
                Console.WriteLine("Root certificate import failed: " + ex.Message);
                throw;
            } 
            finally 
            {
                localTrustStore.Close();
            }

            var settings = MongoClientSettings.FromUrl(new MongoUrl(connectionString));
            var client = new MongoClient(settings);

            var database = client.GetDatabase("sampledatabase");
            var collection = database.GetCollection<BsonDocument>("samplecollection");
            var docToInsert = new BsonDocument { { "pi", 3.14159 } };
            collection.InsertOne(docToInsert);
        }
    }
}
```

------
#### [ MongoDB Shell ]

Der folgende Code zeigt, wie Sie mit der neuesten Version, Mongosh, oder der vorherigen Mongo-Shell-Version eine Verbindung zu Amazon DocumentDB herstellen und diese abfragen, wenn TLS aktiviert ist.

**Stellen Sie mit Mongosh eine Connect zu Amazon DocumentDB her**

**Wichtig**  
Es gibt eine bekannte Einschränkung bei Treibern von Node.js, die älter als Version 6.13.1 sind und die derzeit nicht von der IAM-Identitätsauthentifizierung für Amazon DocumentDB unterstützt werden. Die Treiber und Tools der Datei Node.js, die den Treiber Node.js verwenden (z. B. mongosh), müssen aktualisiert werden, sodass sie den Treiber Node.js der Version 6.13.1 oder höher verwenden.

Ersetzen Sie in den folgenden Beispielen jedes *user input placeholder* Beispiel durch die Informationen Ihres Clusters.

```
mongosh --tls --host cluster-end-point:27017 --tlsCAFile  global-bundle.pem --username sample-user --password password --retryWrites false
```

**Stellen Sie mit der vorherigen Mongo-Shell-Version eine Connect zu Amazon DocumentDB her**

Wenn Sie IAM verwenden, müssen Sie eine frühere Version von Mongo Shell verwenden. Geben Sie eine der folgenden Befehlsoptionen ein:

```
mongo --ssl --host cluster-end-point:27017 --sslCAFile global-bundle.pem --username sample-user --password password
```

Wenn Sie eine Version gleich oder höher als 4.2 verwenden, verwenden Sie den folgenden Code, um eine Verbindung herzustellen. Wiederholbare Schreibvorgänge werden in Amazon DocumentDB nicht unterstützt. Wenn Sie eine ältere Mongo-Shell (nicht Mongosh) verwenden, nehmen Sie den `retryWrites=false` Befehl nicht in eine Codezeichenfolge auf. Standardmäßig sind wiederholbare Schreibvorgänge deaktiviert. `retryWrites=false`Das Einschließen kann zu einem Fehler bei normalen Lesebefehlen führen.

```
mongo --tls --host cluster-end-point:27017 --tlsCAFile global-bundle.pem --username sample-user --password password
```

**Testen Sie die Verbindung**

1. Fügen Sie ein einzelnes Dokument ein.

   ```
   db.myTestCollection.insertOne({'hello':'Amazon DocumentDB'})
   ```

1. Suchen Sie das Dokument, das zuvor eingefügt wurde.

   ```
   db.myTestCollection.find({'hello':'Amazon DocumentDB'})
   ```

------
#### [ R ]

Der folgende Code zeigt, wie Sie mit R mithilfe von mongolite ([https://jeroen.github.io/mongolite/](https://jeroen.github.io/mongolite/)) eine Verbindung zu Amazon DocumentDB herstellen, wenn TLS aktiviert ist.

Ersetzen Sie im folgenden Beispiel jede durch die Informationen *user input placeholder* Ihres Clusters.

```
#Include the mongolite library.
library(mongolite)

mongourl <- paste("mongodb://sample-user:password@sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/test2?ssl=true&",
          "readPreference=secondaryPreferred&replicaSet=rs0", sep="")
          
#Create a MongoDB client, open a connection to Amazon DocumentDB as a replica
#   set and specify the read preference as secondary preferred
client <-  mongo(url = mongourl, options = ssl_options(weak_cert_validation = F, ca ="<PATH/global-bundle.pem>"))

#Insert a single document
str <- c('{"hello" : "Amazon DocumentDB"}')
client$insert(str)

#Find the document that was previously written
client$find()
```

------
#### [ Ruby ]

Der folgende Code zeigt, wie Sie mit Ruby eine Verbindung zu Amazon DocumentDB herstellen, wenn TLS aktiviert ist.

Ersetzen Sie im folgenden Beispiel jede *user input placeholder* durch die Informationen Ihres Clusters.

```
require 'mongo'
require 'neatjson'
require 'json'
client_host = 'mongodb://sample-cluster.node.us-east-1.docdb.amazonaws.com:27017'
client_options = {
   database: 'test',
   replica_set: 'rs0',
   read: {:secondary_preferred => 1},
   user: 'sample-user',
   password: 'password',
   ssl: true,
   ssl_verify: true,
   ssl_ca_cert: 'PATH/global-bundle.pem',
   retry_writes: false
}


begin
   ##Create a MongoDB client, open a connection to Amazon DocumentDB as a
   ##   replica set and specify the read preference as secondary preferred
   client = Mongo::Client.new(client_host, client_options)
   
   ##Insert a single document
   x = client[:test].insert_one({"hello":"Amazon DocumentDB"})
   
   ##Find the document that was previously written
   result = client[:test].find()
   
   #Print the document
   result.each do |document|
      puts JSON.neat_generate(document)
   end
end

#Close the connection
client.close
```

------

## Verbindung bei deaktiviertem TLS herstellen
<a name="connect_programmatically-tls_disabled"></a>

Um ein Codebeispiel für die programmgesteuerte Verbindung zu einem TLS-deaktivierten Amazon DocumentDB-Cluster anzuzeigen, wählen Sie die Registerkarte für die Sprache, die Sie verwenden möchten.

------
#### [ Python ]

Der folgende Code zeigt, wie Sie mithilfe von Python eine Verbindung zu Amazon DocumentDB herstellen, wenn TLS deaktiviert ist.

Ersetzen Sie im folgenden Beispiel jede *user input placeholder* durch die Informationen Ihres Clusters.

```
## Create a MongoDB client, open a connection to Amazon DocumentDB as a replica set and specify the read preference as secondary preferred 
                    
import pymongo
import sys

client = pymongo.MongoClient('mongodb://sample-user:password@sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/?replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false')

##Specify the database to be used
db = client.sample_database

##Specify the collection to be used
col = db.sample_collection

##Insert a single document
col.insert_one({'hello':'Amazon DocumentDB'})

##Find the document that was previously written
x = col.find_one({'hello':'Amazon DocumentDB'})

##Print the result to the screen
print(x)

##Close the connection
client.close()
```

------
#### [ Node.js ]

Der folgende Code zeigt, wie Sie mithilfe von Node.js eine Verbindung zu Amazon DocumentDB herstellen, wenn TLS deaktiviert ist.

**Wichtig**  
Es gibt eine bekannte Einschränkung bei Treibern von Node.js, die älter als Version 6.13.1 sind und die derzeit nicht von der IAM-Identitätsauthentifizierung für Amazon DocumentDB unterstützt werden. Die Treiber und Tools der Datei Node.js, die den Treiber Node.js verwenden (z. B. mongosh), müssen aktualisiert werden, sodass sie den Treiber Node.js der Version 6.13.1 oder höher verwenden.

Ersetzen Sie im folgenden Beispiel jeden durch die Informationen *user input placeholder* Ihres Clusters.

```
var MongoClient = require('mongodb').MongoClient;
                  
//Create a MongoDB client, open a connection to Amazon DocumentDB as a replica set,
//  and specify the read preference as secondary preferred
var client = MongoClient.connect(
'mongodb://sample-user:password@sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/sample-database?replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false', 
{ 
  useNewUrlParser: true
},

function(err, client) {
    if(err)
        throw err;
    //Specify the database to be used
    db = client.db('sample-database');
    
    //Specify the collection to be used
    col = db.collection('sample-collection');

    //Insert a single document
    col.insertOne({'hello':'Amazon DocumentDB'}, function(err, result){
      //Find the document that was previously written
      col.findOne({'hello':'Amazon DocumentDB'}, function(err, result){
        //Print the result to the screen
        console.log(result);
        
        //Close the connection
        client.close()
      });
   });
});
```

------
#### [ PHP ]

Der folgende Code zeigt, wie Sie mit PHP eine Verbindung zu Amazon DocumentDB herstellen, wenn TLS deaktiviert ist.

Ersetzen Sie im folgenden Beispiel jede *user input placeholder* durch die Informationen Ihres Clusters.

```
<?php
//Include Composer's autoloader
require 'vendor/autoload.php';

//Create a MongoDB client and open connection to Amazon DocumentDB
$client = new MongoDB\Client("mongodb://sample-user:password@sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/?retryWrites=false");

//Specify the database and collection to be used
$col = $client->sampledatabase->samplecollection;

//Insert a single document
$result = $col->insertOne( [ 'hello' => 'Amazon DocumentDB'] );

//Find the document that was previously written
$result = $col->findOne(array('hello' => 'Amazon DocumentDB'));

//Print the result to the screen
print_r($result);
?>
```

------
#### [ Go ]

Der folgende Code zeigt, wie Sie mit Go eine Verbindung zu Amazon DocumentDB herstellen, wenn TLS deaktiviert ist.

Ersetzen Sie im folgenden Beispiel beide *user input placeholder* durch die Informationen Ihres Clusters.

```
package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
)

const (
	// Timeout operations after N seconds
	connectTimeout  = 5
	queryTimeout    = 30
	username        = "sample-user"
	password        = "password"
	clusterEndpoint = "sample-cluster.node.us-east-1.docdb.amazonaws.com:27017"
	
	// Which instances to read from
	readPreference           = "secondaryPreferred"
	connectionStringTemplate = "mongodb://%s:%s@%s/sample-database?replicaSet=rs0&readpreference=%s"
)

func main() {

	connectionURI := fmt.Sprintf(connectionStringTemplate, username, password, clusterEndpoint, readPreference)

	client, err := mongo.NewClient(options.Client().ApplyURI(connectionURI))
	if err != nil {
		log.Fatalf("Failed to create client: %v", err)
	}

	ctx, cancel := context.WithTimeout(context.Background(), connectTimeout*time.Second)
	defer cancel()

	err = client.Connect(ctx)
	if err != nil {
		log.Fatalf("Failed to connect to cluster: %v", err)
	}

	// Force a connection to verify our connection string
	err = client.Ping(ctx, nil)
	if err != nil {
		log.Fatalf("Failed to ping cluster: %v", err)
	}

	fmt.Println("Connected to DocumentDB!")

	collection := client.Database("sample-database").Collection("sample-collection")

	ctx, cancel = context.WithTimeout(context.Background(), queryTimeout*time.Second)
	defer cancel()

	res, err := collection.InsertOne(ctx, bson.M{"name": "pi", "value": 3.14159})
	if err != nil {
		log.Fatalf("Failed to insert document: %v", err)
	}

	id := res.InsertedID
	log.Printf("Inserted document ID: %s", id)

	ctx, cancel = context.WithTimeout(context.Background(), queryTimeout*time.Second)
	defer cancel()

	cur, err := collection.Find(ctx, bson.D{})

	if err != nil {
		log.Fatalf("Failed to run find query: %v", err)
	}
	defer cur.Close(ctx)

	for cur.Next(ctx) {
		var result bson.M
		err := cur.Decode(&result)
		log.Printf("Returned: %v", result)

		if err != nil {
			log.Fatal(err)
		}
	}

	if err := cur.Err(); err != nil {
		log.Fatal(err)
	}

}
```

------
#### [ Java ]

Der folgende Code zeigt, wie Sie mit Java eine Verbindung zu Amazon DocumentDB herstellen, wenn TLS deaktiviert ist.

Ersetzen Sie im folgenden Beispiel jede *user input placeholder* durch die Informationen Ihres Clusters.

```
package com.example.documentdb;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.ServerAddress;
import com.mongodb.MongoException;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import org.bson.Document;


public final class Main {
    private Main() {
    }
    public static void main(String[] args) {

        String template = "mongodb://%s:%s@%s/sample-database?replicaSet=rs0&readpreference=%s";
        String username = "sample-user";
        String password = "password";
        String clusterEndpoint = "sample-cluster.node.us-east-1.docdb.amazonaws.com:27017";
        String readPreference = "secondaryPreferred";
        String connectionString = String.format(template, username, password, clusterEndpoint, readPreference);

        MongoClientURI clientURI = new MongoClientURI(connectionString);
        MongoClient mongoClient = new MongoClient(clientURI);

        MongoDatabase testDB = mongoClient.getDatabase("sample-database");
        MongoCollection<Document> numbersCollection = testDB.getCollection("sample-collection");

        Document doc = new Document("name", "pi").append("value", 3.14159);
        numbersCollection.insertOne(doc);

        MongoCursor<Document> cursor = numbersCollection.find().iterator();
        try {
            while (cursor.hasNext()) {
                System.out.println(cursor.next().toJson());
            }
        } finally {
            cursor.close();
        }

    }
}
```

------
#### [ C\$1 / .NET ]

Der folgende Code zeigt, wie Sie mit C\$1 /.NET eine Verbindung zu Amazon DocumentDB herstellen, wenn TLS deaktiviert ist.

Ersetzen Sie im folgenden Beispiel jede *user input placeholder* durch die Informationen Ihres Clusters.

```
using System;
using System.Text;
using System.Linq;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;
using MongoDB.Driver;
using MongoDB.Bson;

namespace CSharpSample
{
   class Program
    {
       static void Main(string[] args)
        {
           string template = "mongodb://{0}:{1}@{2}/sampledatabase?replicaSet=rs0&readpreference={3}";
           string username = "sample-user";
           string password = "password";
           string clusterEndpoint = "sample-cluster.node.us-east-1.docdb.amazonaws.com:27017";
           string readPreference = "secondaryPreferred";
           string connectionString = String.Format(template, username, password, clusterEndpoint, readPreference);

           var settings = MongoClientSettings.FromUrl(new MongoUrl(connectionString));
           var client = new MongoClient(settings);

           var database = client.GetDatabase("sampledatabase");
           var collection = database.GetCollection<BsonDocument>("samplecollection");
           var docToInsert = new BsonDocument { { "pi", 3.14159 } };
            collection.InsertOne(docToInsert);
        }
    }
}
```

------
#### [ MongoDB Shell ]

Der folgende Code zeigt, wie Sie mit der neuesten Version, Mongosh, oder der vorherigen Mongo-Shell-Version eine Verbindung zu Amazon DocumentDB herstellen und diese abfragen, wenn TLS deaktiviert ist.

**Stellen Sie mit Mongosh eine Connect zu Amazon DocumentDB her**

**Wichtig**  
Es gibt eine bekannte Einschränkung bei Treibern von Node.js, die älter als Version 6.13.1 sind und die derzeit nicht von der IAM-Identitätsauthentifizierung für Amazon DocumentDB unterstützt werden. Die Treiber und Tools der Datei Node.js, die den Treiber Node.js verwenden (z. B. mongosh), müssen aktualisiert werden, sodass sie den Treiber Node.js der Version 6.13.1 oder höher verwenden.

Ersetzen Sie in den folgenden Beispielen jedes *user input placeholder* Beispiel durch die Informationen Ihres Clusters.

```
mongosh --host cluster-end-point:27017 --username sample-user --password password --retryWrites false
```

**Stellen Sie mit der vorherigen Mongo-Shell-Version eine Connect zu Amazon DocumentDB her**

Wenn Sie IAM verwenden, müssen Sie eine frühere Version von Mongo Shell verwenden. Geben Sie eine der folgenden Befehlsoptionen ein:

```
mongo --host cluster-end-point:27017 --username sample-user --password password
```

Wenn Sie eine Version gleich oder höher als 4.2 verwenden, verwenden Sie den folgenden Code, um eine Verbindung herzustellen. Wiederholbare Schreibvorgänge werden in Amazon DocumentDB nicht unterstützt. Wenn Sie eine ältere Mongo-Shell (nicht Mongosh) verwenden, nehmen Sie den `retryWrites=false` Befehl nicht in eine Codezeichenfolge auf. Standardmäßig sind wiederholbare Schreibvorgänge deaktiviert. `retryWrites=false`Das Einschließen kann zu einem Fehler bei normalen Lesebefehlen führen.

```
mongo --host cluster-end-point:27017 --username sample-user --password password
```

**Testen Sie die Verbindung**

1. Fügen Sie ein einzelnes Dokument ein.

   ```
   db.myTestCollection.insertOne({'hello':'Amazon DocumentDB'})
   ```

1. Suchen Sie das Dokument, das zuvor eingefügt wurde.

   ```
   db.myTestCollection.find({'hello':'Amazon DocumentDB'})
   ```

------
#### [ R ]

Der folgende Code zeigt, wie Sie mit R mithilfe von mongolite ([https://jeroen.github.io/mongolite/](https://jeroen.github.io/mongolite/)) eine Verbindung zu Amazon DocumentDB herstellen, wenn TLS deaktiviert ist.

Ersetzen Sie im folgenden Beispiel jede durch die Informationen *user input placeholder* Ihres Clusters.

```
#Include the mongolite library.
library(mongolite)
               
#Create a MongoDB client, open a connection to Amazon DocumentDB as a replica
#   set and specify the read preference as secondary preferred
client <- mongo(url = "mongodb://sample-user:password@sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/sample-database?readPreference=secondaryPreferred&replicaSet=rs0")

##Insert a single document
str <- c('{"hello" : "Amazon DocumentDB"}')
client$insert(str)

##Find the document that was previously written
client$find()
```

------
#### [ Ruby ]

Der folgende Code zeigt, wie Sie mit Ruby eine Verbindung zu Amazon DocumentDB herstellen, wenn TLS deaktiviert ist.

Ersetzen Sie im folgenden Beispiel jede *user input placeholder* durch die Informationen Ihres Clusters.

```
require 'mongo'
require 'neatjson'
require 'json'
client_host = 'mongodb://sample-cluster.node.us-east-1.docdb.amazonaws.com:27017'
client_options = {
   database: 'test',
   replica_set: 'rs0',
   read: {:secondary_preferred => 1},
   user: 'sample-user',
   password: 'password',
   retry_writes: false
}
               
begin
   ##Create a MongoDB client, open a connection to Amazon DocumentDB as a
   ##   replica set and specify the read preference as secondary preferred
   client = Mongo::Client.new(client_host, client_options)
   
   ##Insert a single document
   x = client[:test].insert_one({"hello":"Amazon DocumentDB"})
   
   ##Find the document that was previously written
   result = client[:test].find()
   
   #Print the document
   result.each do |document|
      puts JSON.neat_generate(document)
   end
end

#Close the connection
client.close
```

------

# Von außerhalb einer Amazon VPC eine Verbindung zu einem Amazon DocumentDB-Cluster herstellen
<a name="connect-from-outside-a-vpc"></a>

Amazon DocumentDB-Cluster (mit MongoDB-Kompatibilität) werden in einer Amazon Virtual Private Cloud (Amazon VPC) bereitgestellt. Sie können direkt von EC2 Amazon-Instances oder anderen AWS Services abgerufen werden, die in derselben Amazon VPC bereitgestellt werden. Darüber hinaus kann Amazon DocumentDB über VPC-Peering von EC2 Instances oder anderen AWS Services VPCs in verschiedenen Regionen AWS-Region oder in anderen Regionen aufgerufen werden.

Nehmen wir jedoch an, dass Ihr Anwendungsfall erfordert, dass Sie (oder Ihre Anwendung) von außerhalb der VPC des Clusters auf Ihre Amazon DocumentDB DocumentDB-Ressourcen zugreifen. In diesem Fall können Sie SSH-Tunneling (auch bekannt als *Portweiterleitung*) verwenden, um auf Ihre Amazon DocumentDB DocumentDB-Ressourcen zuzugreifen. 

Die eingehende Diskussion zum Thema SSH-Tunneling geht über den Rahmen dieses Themas hinaus. Weitere Informationen zum SSH-Tunneling finden Sie in den folgenden Ressourcen:
+ [SSH-Tunnel](https://www.ssh.com/ssh/tunneling/) 
+ [Beispiel zum SSH-Port-Forwarding](https://www.ssh.com/ssh/tunneling/example), insbesondere der Abschnitt [Lokales Forwarding](https://www.ssh.com/ssh/tunneling/example#sec-Local-Forwarding).

Um einen SSH-Tunnel zu erstellen, benötigen Sie eine EC2 Amazon-Instance, die in derselben Amazon VPC wie Ihr Amazon DocumentDB-Cluster läuft. Sie können entweder eine bestehende EC2 Instanz in derselben VPC wie Ihr Cluster verwenden oder eine erstellen. Weitere Informationen finden Sie im entsprechenden Thema für Ihr Betriebssystem:
+ [Erste Schritte mit Amazon EC2 Linux-Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html)
+ [Erste Schritte mit Amazon EC2 Windows-Instances](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EC2_GetStarted.html)

Normalerweise können Sie mit dem folgenden Befehl eine Verbindung zu einer EC2 Instance herstellen.

```
ssh -i "ec2Access.pem" ubuntu@ec2-34-229-221-164.compute-1.amazonaws.com
```

Falls ja, können Sie einen SSH-Tunnel zum Amazon DocumentDB-Cluster einrichten, `sample-cluster.node.us-east-1.docdb.amazonaws.com` indem Sie den folgenden Befehl auf Ihrem lokalen Computer ausführen. Das `-L`-Flag dient zur Weiterleitung eines lokalen Ports. Wenn Sie einen SSH-Tunnel verwenden, empfehlen wir, dass Sie über den Clusterendpunkt eine Verbindung mit Ihrem Cluster herstellen und nicht versuchen, eine Verbindung im Replikatsatzmodus herzustellen (d. h. `replicaSet=rs0` in der Verbindungszeichenfolge anzugeben), da dies zu einem Fehler führt.

```
ssh -i "ec2Access.pem" -L 27017:sample-cluster.node.us-east-1.docdb.amazonaws.com:27017 ubuntu@ec2-34-229-221-164.compute-1.amazonaws.com -N 
```

Nachdem der SSH-Tunnel erstellt wurde, werden alle Befehle, an die Sie ausgeben, an den Amazon DocumentDB-Cluster weitergeleitet, der in der Amazon `sample-cluster` VPC ausgeführt wird. `localhost:27017` Wenn Transport Layer Security (TLS) auf Ihrem Amazon DocumentDB-Cluster aktiviert ist, müssen Sie den öffentlichen Schlüssel für Amazon DocumentDB von herunterladen. [https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem](https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem) Mit dem folgenden Vorgang wird diese Datei heruntergeladen:

```
wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
```

**Anmerkung**  
TLS ist standardmäßig für neue Amazon DocumentDB-Cluster aktiviert. Eine Deaktivierung ist jedoch möglich. Weitere Informationen finden Sie unter [TLS-Einstellungen für Amazon DocumentDB-Cluster verwalten](security.encryption.ssl.md#security.encryption.ssl.managing). 

Verwenden Sie den folgenden Befehl, um von außerhalb der Amazon VPC eine Verbindung zu Ihrem Amazon DocumentDB-Cluster herzustellen.

```
mongo --sslAllowInvalidHostnames --ssl --sslCAFile global-bundle.pem --username <yourUsername> --password <yourPassword> 
```

# Als Replikatsatz eine Verbindung zu Amazon DocumentDB herstellen
<a name="connect-to-replica-set"></a>

Wenn Sie mit Amazon DocumentDB (mit MongoDB-Kompatibilität) entwickeln, empfehlen wir, dass Sie eine Verbindung zu Ihrem Cluster als Replikatsatz herstellen und Lesevorgänge mithilfe der integrierten Leseeinstellungen Ihres Treibers an Replikatinstanzen verteilen. In diesem Abschnitt wird genauer beschrieben, was das bedeutet, und es wird beschrieben, wie Sie am Beispiel des SDK für Python eine Verbindung zu Ihrem Amazon DocumentDB-Cluster als Replikatsatz herstellen können.

Amazon DocumentDB hat drei Endpunkte, über die Sie eine Verbindung zu Ihrem Cluster herstellen können:
+ Cluster-Endpunkt
+ Leser-Endpunkt
+ Instance-Endpunkte

In den meisten Fällen, wenn Sie eine Verbindung zu Amazon DocumentDB herstellen, empfehlen wir, den Cluster-Endpunkt zu verwenden. Dies ist ein CNAME, der auf die primäre Instance in Ihrem Cluster verweist wie im folgenden Diagramm gezeigt.

Wenn Sie einen SSH-Tunnel verwenden, empfehlen wir, dass Sie über den Clusterendpunkt eine Verbindung mit Ihrem Cluster herstellen und nicht versuchen, eine Verbindung im Replikatsatzmodus herzustellen (d. h. `replicaSet=rs0` in der Verbindungszeichenfolge anzugeben), da dies zu einem Fehler führt.

**Anmerkung**  
Weitere Informationen zu Amazon DocumentDB DocumentDB-Endpunkten finden Sie unter. [Amazon DocumentDB DocumentDB-Endpunkte](how-it-works.md#how-it-works.endpoints)

![\[Diagramm mit Amazon DocumentDB DocumentDB-Endpunkten, einschließlich der Cluster-, Reader- und Instance-Endpunkte.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/docdb-endpoint-types.png)


Mithilfe des Cluster-Endpunkts können Sie im Replikatsatzmodus eine Verbindung zu Ihrem Cluster herstellen. Anschließend können Sie die integrierten Treiberfunktionen für Leseeinstellungen verwenden. Im folgenden Beispiel signalisiert die Angabe von `/?replicaSet=rs0` dem SDK, das Sie eine Verbindung als Replikatsatz herstellen möchten. Wenn Sie `/?replicaSet=rs0'` auslassen, leitet der Client alle Anfragen an den Cluster-Endpunkt weiter, d. h. Ihre primäre Instance.

```
## Create a MongoDB client, open a connection to Amazon DocumentDB as a
   ## replica set and specify the read preference as secondary preferred
   client = pymongo.MongoClient('mongodb://<user-name>:<password>@mycluster.node.us-east-1.docdb.amazonaws.com:27017/?replicaSet=rs0')
```

Der Vorteil der Verbindung als Replikatsatz besteht darin, dass Ihr SDK die Cluster-Topographie automatisch erkennt, auch wenn Instances dem Cluster hinzugefügt oder aus dem Cluster entfernt werden. Anschließend können Sie den Cluster effizienter nutzen, indem Sie Leseanforderungen an Ihre Replikat-Instances weiterleiten.

Wenn Sie eine Verbindung als Replikatsatz herstellen, können Sie die `readPreference` für die Verbindung angeben. Wenn Sie die Leseeinstellung `secondaryPreferred` angeben, leitet der Client Leseabfragen an Ihre Replikate und Schreibabfragen an Ihre primäre Instance weiter (wie im folgenden Diagramm gezeigt). Damit werden Ihre Cluster-Ressourcen besser genutzt. Weitere Informationen finden Sie unter [Lesen Sie die Einstellungsoptionen](how-it-works.md#durability-consistency-isolation).

```
## Create a MongoDB client, open a connection to Amazon DocumentDB as a
   ##   replica set and specify the read preference as secondary preferred
client = pymongo.MongoClient('mongodb://<user-name>:<password>@mycluster.node.us-east-1.docdb.amazonaws.com:27017/?replicaSet=rs0&readPreference=secondaryPreferred')
```

![\[Diagramm, das Amazon DocumentDB readPreference: SecondaryPreferred zeigt.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/docdb-readPreference-secondaryPreferred.png)


Lesevorgänge von Amazon DocumentDB DocumentDB-Replikaten sind letztendlich konsistent. Sie geben die Daten in der gleichen Reihenfolge zurück, in der sie auf dem primären Knoten geschrieben wurden. Die Replikationsverzögerung beträgt häufig weniger als 50 ms. Sie können die Replikatverzögerung für Ihren Cluster mithilfe der CloudWatch Amazon-Metriken `DBInstanceReplicaLag` und `DBClusterReplicaLagMaximum` überwachen. Weitere Informationen finden Sie unter [Überwachen von Amazon DocumentDB mit CloudWatch](cloud_watch.md).

Im Gegensatz zur herkömmlichen monolithischen Datenbankarchitektur trennt Amazon DocumentDB Speicher und Datenverarbeitung. Aufgrund dieser modernen Architektur sollten Sie Lesevorgänge auf Replikat-Instances skalieren. Lesevorgänge auf Replikat-Instances blockieren keine Schreibvorgänge, die von der primären Instance repliziert werden. Sie können einem Cluster bis zu 15 Read-Reaplica-Instances hinzufügen und auf Millionen von Lesevorgängen pro Sekunde skalieren.

Der Hauptvorteil der Verbindung als Replikatsatz und der Verteilung von Lesevorgängen an Replikate besteht darin, dass dies die Gesamtzahl der Ressourcen im Cluster erhöht, die für Ihre Anwendung verfügbar sind. Wir empfehlen die Verbindung als Replikatsatz als bewährte Methode. Darüber hinaus empfehlen wir diesen Ansatz besonders für die folgenden Szenarien:
+ Sie nutzen nahezu 100 Prozent der CPU-Leistung auf Ihrer primären Instance.
+ Das Puffer-Cache-Treffer-Verhältnis ist beinahe Null.
+ Sie erreichen die Verbindungs- oder Cursor-Limits für eine einzelne Instance.

Die Aufwärtsskalierung einer Cluster-Instance-Größe ist eine Option und kann in einigen Fällen die beste Möglichkeit für die Skalierung des Clusters darstellen. Sie sollten jedoch auch überlegen, wie Sie die Replikate, die in Ihrem Cluster bereits vorhanden sind, besser nutzen können. So können Sie die Skalierung erhöhen, ohne dass für Sie höhere Kosten für die Verwendung eines größeren Instance-Typs anfallen. Wir empfehlen außerdem, diese Grenzwerte (d. h., und`BufferCacheHitRatio`) mithilfe von CloudWatch Alarmen zu überwachen und Warnmeldungen zu erstellen `CPUUtilization``DatabaseConnections`, damit Sie wissen, wenn eine Ressource stark beansprucht wird. 

Weitere Informationen finden Sie unter den folgenden Themen:
+ [Bewährte Methoden für Amazon DocumentDB](best_practices.md)
+ [Amazon DocumentDB Kontingente und Beschränkungen](limits.md)

## Verwenden von Clusterverbindungen
<a name="connect-to-replica-set.utilizing-cluster-connections"></a>

Betrachten Sie ein Szenario, in dem alle Verbindungen in Ihrem Cluster genutzt werden. Beispielsweise hat eine `r5.2xlarge`-Instance ein Limit von 4.500 Verbindungen (und 450 offenen Cursors). Wenn Sie einen Amazon DocumentDB-Cluster mit drei Instanzen erstellen und nur über den Cluster-Endpunkt eine Verbindung zur primären Instance herstellen, liegen Ihre Cluster-Grenzwerte für offene Verbindungen und Cursor bei 4.500 bzw. 450. Sie können diese Limits erreichen, wenn Sie Anwendungen mit zahlreichen Workern verwenden, die in Containern gestartet werden. Die Container öffnen mehrere Verbindungen gleichzeitig und sättigen den Cluster.

Stattdessen könnten Sie sich als Replikatsatz mit dem Amazon DocumentDB-Cluster verbinden und Ihre Lesevorgänge an die Replikatinstanzen verteilen. Anschließend könnten Sie die Anzahl der verfügbaren Verbindungen und Cursors im Cluster effektiv auf 13.500 bzw. 1.350 verdreifachen. Das Hinzufügen weiterer Instances zum Cluster erhöht lediglich die Anzahl der Verbindungen und Cursors für Lese-Workloads. Wenn Sie die Anzahl der Verbindungen für Schreibvorgänge in Ihrem Cluster erhöhen müssen, sollten Sie die Instance-Größe erhöhen.

**Anmerkung**  
Die Anzahl der Verbindungen für `large`, `xlarge`, und `2xlarge` Instances erhöht sich mit der Instance-Größe bis zu 4.500. Die maximale Anzahl von Verbindungen pro Instance für `4xlarge` Instances oder größer beträgt 4.500. Weitere Hinweise zu Beschränkungen nach Instance-Typ finden Sie unter [Instance-Limits](limits.md#limits.instance).

In der Regel empfehlen wir das Herstellen von Verbindungen mit Ihrem Cluster unter Verwendung der Leseeinstellung `secondary` nicht. Der Grund hierfür ist, dass die Lesevorgänge fehlschlagen, wenn es keine Replikat-Instances im Cluster gibt. Nehmen wir zum Beispiel an, Sie haben einen Amazon DocumentDB-Cluster mit zwei Instanzen, einem primären und einem Replikat. Wenn die Replikat-Instance ein Problem aufweist, schlagen Leseanforderungen aus einem als `secondary` festgelegten Verbindungspool fehl. Der Vorteil von `secondaryPreferred` besteht darin, dass der Client für Lesevorgänge auf den primären Knoten zurückgreift, wenn er keine geeignete Replikat-Instance für die Verbindung finden kann.

## Mehrere Verbindungspools
<a name="connect-to-replica-set.multiple-connection-pools"></a>

In einigen Szenarien müssen Lesevorgänge in einer Anwendung read-after-write konsistent sein, sodass sie nur von der primären Instance in Amazon DocumentDB bedient werden können. In diesen Szenarien könnten Sie zwei Client-Verbindungspools erstellen: einen für Schreibvorgänge und einen für Lesevorgänge, die read-after-write Konsistenz erfordern. Ihr Code würde in diesem Fall ungefähr wie folgt aussehen.

```
## Create a MongoDB client, 
##    open a connection to Amazon DocumentDB as a replica set and specify the readPreference as primary
clientPrimary = pymongo.MongoClient('mongodb://<user-name>:<password>@mycluster.node.us-east-1.docdb.amazonaws.com:27017/?replicaSet=rs0&readPreference=primary') 
   
## Create a MongoDB client, 
##    open a connection to Amazon DocumentDB as a replica set and specify the readPreference as secondaryPreferred
secondaryPreferred = pymongo.MongoClient('mongodb://<user-name>:<password>@mycluster.node.us-east-1.docdb.amazonaws.com:27017/?replicaSet=rs0&readPreference=secondaryPreferred')
```

Eine weitere Möglichkeit besteht darin, einen einzelnen Verbindungspool zu erstellen und die Leseeinstellung für eine bestimmte Sammlung zu überschreiben.

```
##Specify the collection and set the read preference level for that collection
col = db.review.with_options(read_preference=ReadPreference.SECONDARY_PREFERRED)
```

## Übersicht
<a name="connect-to-replica-set.summary"></a>

Um die Ressourcen im Cluster besser zu nutzen, sollten Sie Verbindungen mit dem Cluster über den Replikatsatzmodus herstellen. Sie können die Zahl der Lesevorgänge für Ihre Anwendung skalieren, indem Sie Ihre Lesevorgänge an die Replikat-Instances verteilen, wenn dies für Ihre Anwendung geeignet ist.

# Von Studio 3T aus eine Verbindung zu einem Amazon DocumentDB-Cluster herstellen
<a name="studio3t"></a>

[Studio 3T](https://studio3t.com/) ist eine beliebte GUI und IDE für Entwickler und Dateningenieure, die mit MongoDB arbeiten. Es bietet mehrere leistungsstarke Funktionen Baum-, Tabellen- und JSON-Ansichten Ihrer Daten, einfach import/export in CSV, JSON, SQL und BSON/MongoDump, flexible Abfrageoptionen, eine visuelle drag-and-drop Benutzeroberfläche, eine integrierte Mongo-Shell mit Autovervollständigung, einen Aggregationspipeline-Editor und SQL-Abfrageunterstützung.

## Voraussetzungen
<a name="prerequisites"></a>
+ Wenn Sie noch keinen Amazon DocumentDB-Cluster haben, der Amazon EC2 als bastion/jump Host verwendet, folgen Sie den Anweisungen zur [Connect mit Amazon](https://docs.aws.amazon.com/documentdb/latest/developerguide/connect-ec2.html) EC2.
+ Wenn Sie Studio 3T nicht haben, laden Sie es [herunter](https://studio3t.com/download) und installieren Sie es. 

## Mit Studio 3T Connect
<a name="connect-studio3t"></a>

1. Wählen Sie in der oberen linken Ecke der Werkzeugleiste **Connect**.  
![\[Studio 3T-Oberfläche mit Willkommensbildschirm und hervorgehobener Connect-Option in der oberen linken Ecke.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/studio3t/studio3t-connect.png)

1. Wählen Sie in der oberen linken Ecke der Werkzeugleiste **Neue Verbindung**.  
![\[Verbindungs-Manager-Oberfläche mit hervorgehobener Option „Neue Verbindung“ in der oberen linken Ecke.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/studio3t/studio3t-newconn.png)

1. Geben Sie auf der Registerkarte **Server** im Feld **Server** die Informationen zum Cluster-Endpunkt ein.  
![\[Registerkarte „Server“ in der Schnittstelle „Neue Verbindung“, wobei das Eingabefeld Server hervorgehoben ist.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/studio3t/studio3t-endpoint.png)
**Anmerkung**  
Sie können Ihren Cluster-Endpunkt nicht finden? Folgen Sie einfach den Schritten [hier](https://docs.aws.amazon.com/documentdb/latest/developerguide/db-instance-endpoint-find.html).

1. Wählen Sie die Registerkarte **Authentifizierung** und wählen Sie **Legacy** im Drop-down-Menü für **Authentifizierungsmodus** aus.  
![\[Registerkarte „Authentifizierung“ in der Benutzeroberfläche „Neue Verbindung“ mit ausgewähltem Legacy-Authentifizierungsmodus und Angabe von Benutzername, Passwort und Authentifizierungs-DB-Informationen.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/studio3t/studio3t-auth.png)

1. Geben Sie Ihren Benutzernamen und Ihre Anmeldeinformationen in die Felder **Benutzername** und **Passwort ein**.

1. Wählen Sie die Registerkarte **SSL** und aktivieren Sie das Kästchen **SSL-Protokoll für die Verbindung verwenden**.  
![\[Auf der Registerkarte „Neue Verbindung“ ist auf der Registerkarte „Neue Verbindung“ die Option „SSL-Protokoll für Verbindung verwenden“ ausgewählt.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/studio3t/studio3t-ssl.png)

1. Wählen Sie **Eigene Root-CA-Datei verwenden**. Fügen Sie dann das Amazon DocumentDB DocumentDB-Zertifikat hinzu (Sie können diesen Schritt überspringen, wenn SSL in Ihrem DocumentDB-Cluster deaktiviert ist). Markieren Sie das Kästchen, um **ungültige** Hostnamen zuzulassen.  
![\[Registerkarte SSL in der Schnittstelle „Neue Verbindung“ mit eingegebener Root-CA-Datei und ausgewählter Option „Ungültige Hostnamen zulassen“.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/studio3t/studio3t-ssl.png)
**Anmerkung**  
Sie haben das Zertifikat nicht? Sie können es mit dem folgenden Befehl herunterladen:  
 `wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem ` 

1. Wenn Sie von einem Client-Computer außerhalb der Amazon VPC aus eine Verbindung herstellen, müssen Sie einen SSH-Tunnel erstellen. Sie werden dies auf der Registerkarte **SSH** tun.

   1. **Aktivieren Sie das Kontrollkästchen **SSH-Tunnel verwenden** und geben Sie die SSH-Adresse in das Feld SSH-Adresse ein.** Dies ist Ihre Instanz Public DNS (). IPV4 Sie können diese URL von Ihrer [Amazon EC2-Managementkonsole](https://console.aws.amazon.com/ec2) abrufen.

   1. Geben Sie Ihren Nutzernamen ein. Dies ist der Benutzername Ihrer Amazon EC2 EC2-Instance 

   1. **Wählen Sie für den **SSH-Authentifizierungsmodus die** Option Private Key aus.** Wählen Sie im Feld **Privater Schlüssel** das Dateifinder-Symbol aus, um den privaten Schlüssel Ihrer Amazon EC2 EC2-Instance zu suchen und auszuwählen. Dies ist die PEM-Datei (key pair), die Sie beim Erstellen Ihrer Instance in der Amazon EC2 EC2-Konsole gespeichert haben.

   1. Wenn Sie sich auf einem Linux/macOS Client-Computer befinden, müssen Sie möglicherweise die Berechtigungen Ihres privaten Schlüssels mit dem folgenden Befehl ändern:

      `chmod 400 /fullPathToYourPemFile/<yourKey>.pem`  
![\[SSH-Tab in der Schnittstelle „Neue Verbindung“ mit eingegebenen SSH-Tunnelanmeldedaten.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/studio3t/studio3t-ssh.png)
**Anmerkung**  
Diese Amazon EC2 EC2-Instance sollte sich in derselben Amazon VPC und Sicherheitsgruppe wie Ihr DocumentDB-Cluster befinden. Sie können die SSH-Adresse, den Benutzernamen und den privaten Schlüssel von Ihrer [Amazon EC2-Managementkonsole](https://console.aws.amazon.com/ec2) abrufen.

1. Testen Sie nun Ihre Konfiguration, indem Sie auf die Schaltfläche **Verbindung testen klicken**.  
![\[Neue Verbindungsschnittstelle mit hervorgehobener Schaltfläche „Verbindung testen“ in der unteren linken Ecke.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/studio3t/studio3t-testbutton.png)

1. In einem Diagnosefenster sollte ein grüner Balken angezeigt werden, der anzeigt, dass der Test erfolgreich war. Wählen Sie nun **OK**, um das Diagnosefenster zu schließen.  
![\[Diagnosefenster, das nach einem erfolgreichen Verbindungstest erscheint.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/studio3t/studio3t-testconn.png)

1. Wählen Sie **Speichern**, um Ihre Verbindung für die future Verwendung zu speichern.  
![\[Neue Verbindungsschnittstelle mit hervorgehobener Schaltfläche „Speichern“.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/studio3t/studio3t-save.png)

1. Wählen Sie nun Ihren Cluster aus und wählen Sie **Connect**.  
![\[Verbindungs-Manager-Oberfläche mit hervorgehobener Schaltfläche „Connect“.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/studio3t/studio3t-finalconnect.png)

Herzlichen Glückwunsch\$1 Sie sind jetzt erfolgreich über Studio 3T mit Ihrem Amazon DocumentDB-Cluster verbunden.

# Connect zu Amazon DocumentDB her mit DataGrip
<a name="data-grip-connect"></a>

[DataGrip](https://www.jetbrains.com/help/datagrip/documentdb.html)ist eine leistungsstarke integrierte Entwicklungsumgebung (IDE), die verschiedene Datenbanksysteme unterstützt, darunter Amazon DocumentDB. Dieser Abschnitt führt Sie durch die Schritte, mit denen Sie eine Verbindung zu Ihrem Amazon DocumentDB-Cluster herstellen DataGrip, sodass Sie Ihre Daten einfach über eine grafische Oberfläche verwalten und abfragen können.

## Voraussetzungen
<a name="data-grip-prerequisites"></a>
+ DataGrip IDE ist auf Ihrem Computer installiert. Sie können es von herunterladen [JetBrains](https://www.jetbrains.com/datagrip/download/#section=windows).
+ Eine EC2 Amazon-Instance, die in derselben VPC wie Ihr Amazon DocumentDB-Cluster läuft. Sie verwenden diese Instanz, um einen sicheren Tunnel von Ihrem lokalen Computer zum Amazon-Dokument einzurichtenDBcluster. Folgen Sie den Anweisungen dazu[Stellen Sie mithilfe von Amazon EC2 eine Verbindung her](connect-ec2.md).
+ Alternative zu einer EC2 Amazon-Instance, einer VPN-Verbindung oder wenn Sie bereits über ein sicheres VPN auf Ihre AWS Infrastruktur zugreifen. Wenn Sie diese Option bevorzugen, folgen Sie den Anweisungen für den [sicheren Zugriff auf Amazon DocumentDB mit AWS Client VPN](https://aws.amazon.com/blogs/database/securely-access-amazon-documentdb-with-mongodb-compatibility-locally-using-aws-client-vpn/).

## Connect mit DataGrip
<a name="data-grip-connect-steps"></a>

1. Starten Sie DataGrip auf Ihrem Computer und erstellen Sie ein **neues Projekt**.  
![\[DataGrip Willkommensbildschirm, auf dem die Option Neues Projekt markiert ist.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/welcome.png)

1. Fügen Sie mithilfe einer der folgenden Methoden eine neue Datenquelle hinzu:

   1. Navigieren Sie im Hauptmenü zu **Datei — Neu — Datenquelle** und wählen Sie **DocumentDB**

   1. Klicken Sie im **Datenbank-Explorer** in der Werkzeugleiste auf das neue Symbol (**\$1**). Navigieren Sie zu **Data Source** und wählen Sie **DocumentDB** aus.  
![\[Die Drop-down-Liste für + zeigt das Untermenü Datenquelle. DocumentDB wird aus diesem Untermenü ausgewählt.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/explorer.png)

1. Überprüfen Sie auf der Seite **Datenquellen** auf der Registerkarte **Allgemein**, ob sich unten im Bereich mit den Verbindungseinstellungen der Link **Fehlende Treiberdateien herunterladen** befindet. Klicken Sie auf diesen Link, um Treiber herunterzuladen, die für die Interaktion mit einer Datenbank erforderlich sind. Einen direkten Download-Link finden Sie unter [JetBrains JDBC-Treiber](https://www.jetbrains.com/datagrip/jdbc-drivers/).  
![\[Schnittstelle zwischen Datenquellen und Treibern, wobei der Link „Fehlende Treiberdateien herunterladen“ hervorgehoben ist.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/missing-driver.png)

1. Geben Sie auf der Registerkarte **Allgemein** die Verbindungsdetails an:

   1. Geben Sie im Feld **Host** den Amazon DocumentDB-Cluster-Endpunkt an.

   1. **Der Port** ist bereits auf 27017 eingestellt. Ändern Sie es, wenn Ihr Cluster auf einem anderen Port bereitgestellt wurde.

   1. Wählen Sie für **Authentifizierung** die Option **Benutzer und Passwort** aus.

   1. Geben Sie Ihren Benutzernamen und Ihr Passwort ein.

   1. Das **Datenbankfeld** ist optional. Sie können die Datenbank angeben, zu der Sie eine Verbindung herstellen möchten.

   1. Das **URL-Feld** wird automatisch vervollständigt, wenn Sie die obigen Details hinzufügen.  
![\[Host-, Port-, Authentifizierungs-, Datenbank- und URL-Felder auf der Registerkarte „Allgemein“ der Benutzeroberfläche „Datenquellen und Treiber“.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/connection.png)

1. **Aktivieren **Sie auf der Registerkarte **SSH/SSL** die Option SSH-Tunnel verwenden und klicken Sie dann auf das Symbol, um den SSH-Konfigurationsdialog** zu öffnen.** Geben Sie die folgenden Informationen ein:

   1. Geben Sie im Feld **Host** den Hostnamen Ihrer EC2 Amazon-Instance ein.

   1. Geben Sie den Benutzernamen und das Passwort für Ihre EC2 Amazon-Instance ein.

   1. Wählen Sie als **Authentifizierungstyp** die Option **Schlüsselpaar** aus.

   1. Geben Sie Ihre **private Schlüsseldatei** ein.
**Anmerkung**  
Wenn Sie die VPN-Option verwenden, müssen Sie den SSH-Tunnel nicht konfigurieren.  
![\[Auf der Registerkarte SSH/SSL in der Benutzeroberfläche für Datenquellen und Treiber ist die Option SSH-Tunnel verwenden ausgewählt und das SSH-Konfigurationssymbol hervorgehoben. Das Symbol öffnet die angezeigte SSH-Konfigurationsoberfläche.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ssh-tunnel.png)

1. **Aktivieren Sie auf der Registerkarte **SSH/SSL** die Option SSL verwenden.** Geben Sie im Feld **CA-Datei** den Speicherort der `global-bundle.pem` Datei auf Ihrem Computer ein. Behalten Sie für **Modus** die Option **Erforderlich bei**.
**Anmerkung**  
Sie können das Zertifikat von diesem Speicherort oder mit dem folgenden Befehl herunterladen: wget [https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem](https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem)
**Anmerkung**  
Wenn Sie eine Verbindung zu Amazon DocumentDB Elastic Cluster herstellen, müssen Sie die CA-Datei nicht angeben. Lassen Sie die Option **SSL verwenden** aktiviert und lassen Sie alle anderen Optionen auf ihren Standardwerten stehen.  
![\[Registerkarte SSH/SSL in der Benutzeroberfläche für Datenquellen und Treiber mit aktivierten SSL-Einstellungen.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/use-ssl.png)

1. **Wählen Sie auf der Registerkarte **Schemas** die Option **Alle Datenbanken** aus, oder geben Sie den Filter „\$1: \$1“ in das Feld Schemamuster ein.** Klicken Sie auf den Link **Verbindung testen**, um die Verbindung zu testen.  
![\[Auf der Registerkarte Schemas in der Benutzeroberfläche Datenquellen und Treiber ist die Option Alle Datenbanken ausgewählt. Über dem Link Verbindung testen wird die Meldung Erfolgreich angezeigt.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/schemas.png)

1. Sobald die Verbindung erfolgreich getestet wurde, klicken Sie auf **OK**, um die Datenquellenkonfiguration zu speichern.

## DataGrip features
<a name="data-grip-features"></a>

DataGrip bietet verschiedene Funktionen, die Ihnen helfen, effizient mit Amazon DocumentDB zu arbeiten:
+ **SQL Editor** — Schreiben Sie SQL-ähnliche Abfragen in Ihren DocumentDB-Sammlungen und führen Sie sie mit dem SQL-Editor in aus. DataGrip
+ **Visual Query Builder** — Verwenden Sie den Visual Query Builder, um Abfragen grafisch zu erstellen, ohne SQL-Code schreiben zu müssen.
+ **Schemaverwaltung** — Einfache Verwaltung Ihres Datenbankschemas, einschließlich des Erstellens, Änderns und Löschens von Sammlungen.
+ **Datenvisualisierung** — Zeigen Sie Ihre Daten an und analysieren Sie sie mithilfe verschiedener Visualisierungstools, die unter verfügbar sind. DataGrip
+ **Daten exportieren und importieren** — Übertragen Sie Daten zwischen Amazon DocumentDB und anderen Datenbanken mithilfe DataGrip der Export- und Importfunktionen.

Weiterführende Funktionen und Tipps zur Arbeit mit Amazon DocumentDB und anderen Datenbanksystemen finden Sie in der offiziellen [DataGrip Dokumentation](https://www.jetbrains.com/datagrip/features/).

# Stellen Sie mithilfe von Amazon EC2 eine Verbindung her
<a name="connect-ec2"></a>

In diesem Abschnitt wird beschrieben, wie Sie die Konnektivität zwischen einem Amazon DocumentDB-Cluster und Amazon EC2 einrichten und von der Amazon EC2-Instance aus auf den Amazon DocumentDB-Cluster zugreifen.

Es gibt zwei Optionen für die Konfiguration der EC2-Verbindung:
+ [Automatisches Verbinden Ihrer EC2-Instance mit einer Amazon DocumentDB DocumentDB-Datenbank](connect-ec2-auto.md) — Verwenden Sie die automatische Verbindungsfunktion in der EC2-Konsole, um die Verbindung zwischen Ihrer EC2-Instance und einer neuen oder vorhandenen Amazon DocumentDB DocumentDB-Datenbank automatisch zu konfigurieren. Diese Verbindung ermöglicht den Verkehr zwischen der EC2-Instance und der Amazon DocumentDB DocumentDB-Datenbank. Diese Option wird normalerweise zum Testen und Erstellen neuer Sicherheitsgruppen verwendet.
+ [Manuelles Verbinden Ihrer EC2-Instance mit Ihrer Amazon DocumentDB DocumentDB-Datenbank](connect-ec2-manual.md) — Konfigurieren Sie die Verbindung zwischen Ihrer EC2-Instance und Ihrer Amazon DocumentDB DocumentDB-Datenbank, indem Sie die Sicherheitsgruppen manuell konfigurieren und zuweisen, um die Konfiguration zu reproduzieren, die durch die automatische Verbindungsfunktion erstellt wird. Diese Option wird normalerweise verwendet, um erweiterte Einstellungen zu ändern und bestehende Sicherheitsgruppen zu verwenden.

## Voraussetzungen
<a name="connect-ec2-prerequisites"></a>

Unabhängig von der Option und bevor Sie Ihren ersten Amazon DocumentDB-Cluster erstellen, müssen Sie Folgendes tun:

**Erstellen Sie ein Amazon Web Services (AWS) -Konto**  
Bevor Sie Amazon DocumentDB verwenden können, benötigen Sie ein Amazon Web Services (AWS) -Konto. Das AWS Konto ist kostenlos. Sie zahlen nur für die Services und Ressourcen, die Sie wirklich nutzen.  
Wenn Sie noch keinen haben AWS-Konto, führen Sie die folgenden Schritte aus, um einen zu erstellen.  

**Um sich für eine anzumelden AWS-Konto**

1. Öffnen Sie [https://portal.aws.amazon.com/billing/die Anmeldung.](https://portal.aws.amazon.com/billing/signup)

1. Folgen Sie den Online-Anweisungen.

   Während der Anmeldung erhalten Sie einen Telefonanruf oder eine Textnachricht und müssen einen Verifizierungscode über die Telefontasten eingeben.

   Wenn Sie sich für eine anmelden AWS-Konto, *Root-Benutzer des AWS-Kontos*wird eine erstellt. Der Root-Benutzer hat Zugriff auf alle AWS-Services und Ressourcen des Kontos. Als bewährte Sicherheitsmethode weisen Sie einem Benutzer Administratorzugriff zu und verwenden Sie nur den Root-Benutzer, um [Aufgaben auszuführen, die Root-Benutzerzugriff erfordern](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

**Richten Sie optional die erforderlichen AWS Identity and Access Management (IAM-) Berechtigungen ein.**  
Für den Zugriff auf die Verwaltung von Amazon DocumentDB DocumentDB-Ressourcen wie Clustern, Instances und Cluster-Parametergruppen sind Anmeldeinformationen erforderlich, mit denen Sie Ihre Anfragen authentifizieren AWS können. Weitere Informationen finden Sie unter [Identity and Access Management für Amazon DocumentDB](security-iam.md).   

1. Geben Sie in der Suchleiste von IAM ein und wählen Sie im angezeigten Drop-down-Menü **IAM** aus. AWS-Managementkonsole

1. Sobald Sie sich in der IAM-Konsole befinden, wählen Sie im **Navigationsbereich Benutzer** aus.

1. Wählen Sie Ihren Nutzernamen aus.

1. Klicken Sie auf den Button **Berechtigungen hinzufügen**.

1. Wählen Sie die Option **Attach existing policies directly (Vorhandene Richtlinien direkt anfügen)** aus.

1. Geben Sie `AmazonDocDBFullAccess` in die Suchleiste ein und wählen Sie sie aus, sobald sie in den Suchergebnissen erscheint.

1. Klicken Sie unten auf die blaue Schaltfläche mit der Aufschrift **Weiter: Überprüfen**.

1. Klicken Sie unten auf die blaue Schaltfläche mit der Aufschrift **Berechtigungen hinzufügen**.

**Erstellen Sie eine Amazon Virtual Private Cloud (Amazon VPC)**  
Je nachdem, in welchem Bereich AWS-Region Sie sich befinden, haben Sie möglicherweise bereits eine Standard-VPC erstellt oder auch nicht. Wenn Sie keine Standard-VPC haben, führen Sie Schritt 1 der Anleitung [Erste Schritte mit Amazon VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html) im *Amazon VPC-Benutzerhandbuch* durch. Dies dauert weniger als fünf Minuten.

# Amazon EC2 automatisch Connect
<a name="connect-ec2-auto"></a>

**Topics**
+ [

## Automatisches Verbinden einer EC2-Instance mit einer neuen Amazon DocumentDB DocumentDB-Datenbank
](#auto-connect-ec2.process)
+ [

## Automatisches Verbinden einer EC2-Instance mit einer vorhandenen Amazon DocumentDB DocumentDB-Datenbank
](#auto-connect-ec2-existing-cluster)
+ [

## Übersicht über die automatische Verbindung mit einer EC2-Instance
](#auto-connect-ec2.overview)
+ [

## Anzeigen verbundener Rechenressourcen
](#auto-connect-ec2.compute)

Bevor Sie eine Verbindung zwischen einer EC2-Instance und einer neuen Amazon DocumentDB DocumentDB-Datenbank einrichten, stellen Sie sicher, dass Sie die unter beschriebenen Anforderungen erfüllen. [Übersicht über die automatische Verbindung mit einer EC2-Instance](#auto-connect-ec2.overview) Wenn Sie nach der Konfiguration der Konnektivität Änderungen an Sicherheitsgruppen vornehmen, können sich die Änderungen auf die Verbindung zwischen der EC2-Instance und der Amazon DocumentDB DocumentDB-Datenbank auswirken. 

**Anmerkung**  
Sie können nur automatisch eine Verbindung zwischen einer EC2-Instance und einer Amazon DocumentDB DocumentDB-Datenbank einrichten, indem Sie die verwenden. AWS-Managementkonsole Sie können keine automatische Verbindung mit der AWS CLI oder der Amazon DocumentDB DocumentDB-API einrichten.

## Automatisches Verbinden einer EC2-Instance mit einer neuen Amazon DocumentDB DocumentDB-Datenbank
<a name="auto-connect-ec2.process"></a>

Beim folgenden Prozess wird davon ausgegangen, dass Sie die Schritte im Thema abgeschlossen haben. [Voraussetzungen](connect-ec2.md#connect-ec2-prerequisites)

**Topics**
+ [

### Schritt 1: Erstellen Sie eine Amazon EC2 EC2-Instance
](#auto-connect-ec2.launch-ec2-instance)
+ [

### Schritt 2: Erstellen Sie einen Amazon DocumentDB-Cluster
](#auto-connect-ec2.launch-cluster)
+ [

### Schritt 3: Connect zu Ihrer Amazon EC2 EC2-Instance her
](#manual-connect-ec2.connect)
+ [

### Schritt 4: Installieren Sie die MongoDB-Shell
](#auto-connect-ec2.install-mongo-shell)
+ [

### Schritt 5: Amazon DocumentDB TLS verwalten
](#auto-connect-ec2.tls)
+ [

### Schritt 6: Connect zu Ihrem Amazon DocumentDB-Cluster her
](#auto-connect-ec2.connect-use)
+ [

### Schritt 7: Daten einfügen und abfragen
](#auto-cloud9-insert-query)
+ [

### Schritt 8: Erkunden
](#auto-connect-ec2.explore)

### Schritt 1: Erstellen Sie eine Amazon EC2 EC2-Instance
<a name="auto-connect-ec2.launch-ec2-instance"></a>

In diesem Schritt erstellen Sie eine Amazon EC2 EC2-Instance in derselben Region und Amazon VPC, die Sie später für die Bereitstellung Ihres Amazon DocumentDB-Clusters verwenden werden. 

1. Wählen Sie auf der Amazon EC2 EC2-Konsole **Launch instance** aus.  
![\[Der Abschnitt Launch Instance auf der Amazon EC2 EC2-Konsole.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/launch-instance.png)

1. Geben Sie einen Namen oder eine Kennung in das Feld **Name** im Abschnitt **Name und Tags** ein.

1. Suchen Sie in der Dropdownliste **Amazon Machine Image (AMI)** nach **Amazon Linux 2 AMI** und wählen Sie es aus.  
![\[Die Anwendungs- und Betriebssystem-Images bieten eine Schnittstelle mit der Amazon Linux 2 AMI-Option, die im Abschnitt Schnellstart ausgewählt wurde.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/linux2-ami.png)

1. Suchen Sie in der Dropdownliste **Instance-Typ** nach **t3.micro** und wählen Sie es aus.

1. Geben Sie im Abschnitt **key pair (Anmeldung)** die Kennung eines vorhandenen Schlüsselpaars ein, oder wählen Sie **Neues Schlüsselpaar erstellen**.  
![\[Die Schlüsselpaar-Schnittstelle mit dem Feld für den Namen des key pair und der Option Neues key pair erstellen.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/key-pair.png)

   Sie müssen ein Amazon EC2 EC2-Schlüsselpaar angeben.
   + Wenn Sie ein Amazon EC2 EC2-Schlüsselpaar haben:

     1. Wählen Sie ein key pair aus, wählen Sie Ihr key pair aus der Liste.

     1. Sie müssen die private Schlüsseldatei (.pem- oder .ppk-Datei) bereits verfügbar haben, um sich bei Ihrer Amazon EC2 EC2-Instance anmelden zu können.
   + Wenn Sie kein Amazon EC2 EC2-Schlüsselpaar haben:

     1. Wählen Sie **Neues key pair** **erstellen. Daraufhin wird das Dialogfeld key pair** erstellen angezeigt.

     1. Geben Sie einen Namen in das Feld **Name des Schlüsselpaars** ein.

     1. Wählen Sie den **Schlüsselpaartyp** und das **Dateiformat für den privaten Schlüssel**. 

     1. Wählen Sie **Create Key Pair (Schlüsselpaar erstellen)** aus.  
![\[Die Schnittstelle key pair erstellen mit Feldern für den Namen, den Typ und das Dateiformat des key pair. Die Schaltfläche key pair erstellen befindet sich in der unteren rechten Ecke.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/create-key-pair.png)
**Anmerkung**  
Aus Sicherheitsgründen empfehlen wir dringend, ein Schlüsselpaar sowohl für die SSH- als auch für die Internetverbindung zu Ihrer EC2-Instance zu verwenden.

1. **Optional:** **Wählen Sie im **Abschnitt Netzwerkeinstellungen** unter **Firewall (Sicherheitsgruppen) die Option Sicherheitsgruppe erstellen** aus.**  
![\[Die Oberfläche mit den Netzwerkeinstellungen zeigt Optionen zum Erstellen einer Sicherheitsgruppe.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/firewall.png)

   Wählen Sie **Sicherheitsgruppe erstellen** (überprüfen Sie alle Regeln für die Zulassung von Datenverkehr, die für Ihre EC2-Konnektivität gelten).
**Anmerkung**  
Wenn Sie eine bestehende Sicherheitsgruppe verwenden möchten, folgen Sie den Anweisungen unter[Manuelles Connect von Amazon EC2](connect-ec2-manual.md).

1. Überprüfen Sie im Abschnitt **Zusammenfassung** Ihre EC2-Konfiguration und wählen Sie **Launch instance**, falls korrekt.

### Schritt 2: Erstellen Sie einen Amazon DocumentDB-Cluster
<a name="auto-connect-ec2.launch-cluster"></a>

Während die Amazon EC2 EC2-Instance bereitgestellt wird, erstellen Sie Ihren Amazon DocumentDB-Cluster. 

1. Navigieren Sie zur Amazon DocumentDB DocumentDB-Konsole und wählen Sie im Navigationsbereich **Clusters** aus.

1. Wählen Sie **Erstellen** aus.

1. Belassen Sie die Standardeinstellung für den **Clustertyp** **auf Instance Based Cluster**.

1. Geben Sie in **Clusterkonfiguration** für **Cluster-ID** einen eindeutigen Namen ein. Beachten Sie, dass die Konsole alle Clusternamen unabhängig davon, wie sie eingegeben wurden, in Kleinbuchstaben ändert.

   **Behalten Sie für die **Engine-Version** den Standardwert 5.0.0 bei.**

1. Behalten Sie für die **Cluster-Speicherkonfiguration** die Standardeinstellung von **Amazon DocumentDB Standard** bei.

1. In der **Instanzkonfiguration**:
   + Wählen Sie für **DB-Instance-Klasse** die Option **Speicheroptimierte Klassen (einschließlich R-Klassen)** aus (dies ist die Standardeinstellung).

     Bei der anderen Instance-Option handelt es sich um **Klassen mit NVMe -backed.** Weitere Informationen hierzu finden Sie unter [NVMe-gestützte Instances](db-instance-nvme.md).
   + Wählen Sie für **Instance-Klasse** den Instance-Typ aus, der Ihren Anforderungen entspricht. Eine detailliertere Erläuterung der Instanzklassen finden Sie unter[Spezifikationen der Instanzklasse](db-instance-classes.md#db-instance-class-specs).
   + Wählen Sie für **die Anzahl der Instances** eine Zahl aus, die Ihren Anforderungen am besten entspricht. Denken Sie daran, je niedriger die Anzahl, desto niedriger die Kosten und desto geringer das read/write Volumen, das vom Cluster verwaltet werden kann.  
![\[Konfigurationsoberfläche mit Standardwerten für Cluster-ID, Engine-Version und Instanzklasse, wobei die Anzahl der Instanzen auf eins festgelegt ist.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/create-cluster/instance-config.png)

1. Wählen Sie für **Konnektivität** die Option Mit **einer EC2-Rechenressource Connect** aus. Dies ist die EC2-Instance, die Sie in Schritt 1 erstellt haben.  
![\[Konnektivitätsschnittstelle, bei der die Option Mit einer EC2-Rechenressource Connect ausgewählt ist.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2-connect.png)
**Anmerkung**  
Wenn Sie eine Verbindung zu einer EC2-Rechenressource herstellen, wird automatisch eine Sicherheitsgruppe für Ihre EC2-Rechenressourcenverbindung zu Ihrem Amazon DocumentDB-Cluster erstellt. Wenn Sie mit der Erstellung Ihres Clusters fertig sind und die neu erstellte Sicherheitsgruppe sehen möchten, navigieren Sie zur Cluster-Liste und wählen Sie die Kennung Ihres Clusters aus. Gehen Sie auf der Registerkarte **Konnektivität und Sicherheit** zu **Sicherheitsgruppen** und suchen Sie unter **Sicherheitsgruppenname (ID) nach Ihrer Gruppe**. Sie wird den Namen Ihres Clusters enthalten und etwa wie folgt aussehen:`docdb-ec2-docdb-2023-12-11-21-33-41:i-0e4bb09985d2bbc4c (sg-0238e0b0bf0f73877)`.

1. Geben Sie im Abschnitt **Authentifizierung** einen Benutzernamen für den Hauptbenutzer ein und wählen Sie dann **Selbstverwaltet** aus. Geben Sie ein Passwort ein und bestätigen Sie es.

   Wenn Sie stattdessen **Verwaltet in** wählen AWS Secrets Manager, finden Sie [Passwortverwaltung mit Amazon DocumentDB und AWS Secrets Manager](docdb-secrets-manager.md) weitere Informationen unter.

1. Wählen Sie **Cluster erstellen**.

### Schritt 3: Connect zu Ihrer Amazon EC2 EC2-Instance her
<a name="manual-connect-ec2.connect"></a>

Um die Mongo-Shell zu installieren, müssen Sie zuerst eine Verbindung zu Ihrer Amazon EC2 EC2-Instance herstellen. Durch die Installation der Mongo-Shell können Sie eine Verbindung zu Ihrem Amazon DocumentDB-Cluster herstellen und ihn abfragen. Führen Sie folgende Schritte aus:

1. Navigieren Sie auf der Amazon EC2 EC2-Konsole zu Ihren Instances und überprüfen Sie, ob die gerade erstellte Instance läuft. Wenn ja, wählen Sie die Instance aus, indem Sie auf die Instance-ID klicken.  
![\[Instance-Tabelle mit zwei Instances in der Amazon EC2 EC2-Konsole.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/ec2-instance-table.png)

1. Wählen Sie **Connect** aus.  
![\[Instanzzusammenfassung für eine Amazon EC2 EC2-Instance. Die Schaltfläche Connect befindet sich in der oberen rechten Ecke.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/ec2-instance-summary.png)

1. Es gibt vier Optionen mit Registerkarten für Ihre Verbindungsmethode: Amazon EC2 Instance Connect, Session Manager, SSH-Client oder serielle EC2-Konsole. Sie müssen eine auswählen und deren Anweisungen befolgen. Wenn Sie fertig sind, wählen Sie **Connect**.  
![\[Schnittstelle mit Konfigurationsoptionen für die EC2 Instance Connect-Verbindungsmethode.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/connect-options.png)

**Anmerkung**  
Wenn sich Ihre IP-Adresse geändert hat, nachdem Sie diesen Walkthrough gestartet haben, oder wenn Sie zu einem späteren Zeitpunkt zu Ihrer Umgebung zurückkehren, müssen Sie Ihre `demoEC2` Sicherheitsgruppenregel für eingehenden Datenverkehr aktualisieren, um eingehenden Datenverkehr von Ihrer neuen API-Adresse aus zu ermöglichen.

### Schritt 4: Installieren Sie die MongoDB-Shell
<a name="auto-connect-ec2.install-mongo-shell"></a>

Sie können jetzt die MongoDB-Shell installieren. Dabei handelt es sich um ein Befehlszeilenprogramm, mit dem Sie eine Verbindung herstellen und Ihren Amazon DocumentDB-Cluster abfragen können. Derzeit gibt es zwei Versionen der MongoDB-Shell: die neueste Version, Mongosh, und die vorherige Version, Mongo-Shell.

**Wichtig**  
Es gibt eine bekannte Einschränkung bei Treibern von Node.js, die älter als Version 6.13.1 sind und die derzeit nicht von der IAM-Identitätsauthentifizierung für Amazon DocumentDB unterstützt werden. Die Treiber und Tools der Datei Node.js, die den Treiber Node.js verwenden (z. B. mongosh), müssen aktualisiert werden, sodass sie den Treiber Node.js der Version 6.13.1 oder höher verwenden.

Folgen Sie den nachstehenden Anweisungen, um die MongoDB-Shell für Ihr Betriebssystem zu installieren.

------
#### [ On Amazon Linux ]

**So installieren Sie die MongoDB-Shell auf Amazon Linux**

Wenn Sie *keine* IAM-Authentifizierung verwenden und die neueste MongoDB-Shell (mongosh) verwenden möchten, um eine Verbindung zu Ihrem Amazon DocumentDB-Cluster herzustellen, gehen Sie wie folgt vor:

1. Erstellen Sie die Repository-Datei. Führen Sie in der Befehlszeile Ihrer EC2-Instance, die Sie erstellt haben, den folgenden Befehl aus:

   ```
   echo -e "[mongodb-org-5.0] \nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/amazon/2023/mongodb-org/5.0/x86_64/\ngpgcheck=1 \nenabled=1 \ngpgkey=https://pgp.mongodb.com/server-5.0.asc" | sudo tee /etc/yum.repos.d/mongodb-org-5.0.repo
   ```

1. Wenn der Vorgang abgeschlossen ist, installieren Sie mongosh mit einer der beiden folgenden Befehlsoptionen an der Befehlszeile:

   **Option 1** — Wenn Sie während der Amazon EC2-Konfiguration das standardmäßige Amazon Linux 2023 ausgewählt haben, geben Sie diesen Befehl ein:

   ```
   sudo yum install -y mongodb-mongosh-shared-openssl3
   ```

   **Option 2** — Wenn Sie bei der Amazon EC2-Konfiguration Amazon Linux 2 ausgewählt haben, geben Sie diesen Befehl ein:

   ```
   sudo yum install -y mongodb-mongosh
   ```

Wenn Sie die IAM-Authentifizierung verwenden, müssen Sie die vorherige Version der MongoDB-Shell (5.0) verwenden, um eine Verbindung zu Ihrem Amazon DocumentDB-Cluster herzustellen. Gehen Sie wie folgt vor:

1. Erstellen Sie die Repository-Datei. Führen Sie in der Befehlszeile Ihrer EC2-Instance, die Sie erstellt haben, den folgenden Befehl aus:

   ```
   echo -e "[mongodb-org-5.0] \nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/amazon/2023/mongodb-org/5.0/x86_64/\ngpgcheck=1 \nenabled=1 \ngpgkey=https://pgp.mongodb.com/server-5.0.asc" | sudo tee /etc/yum.repos.d/mongodb-org-5.0.repo
   ```

1. Wenn der Vorgang abgeschlossen ist, installieren Sie die Mongodb 5.0-Shell mit der folgenden Befehlsoption an der Befehlszeile:

   ```
   sudo yum install -y mongodb-org-shell
   ```

------
#### [ On Ubuntu ]

**Um mongosh auf Ubuntu zu installieren**

1. Importieren Sie den öffentlichen Schlüssel, der von dem Paketverwaltungssystem verwendet wird.

   ```
   curl -fsSL https://pgp.mongodb.com/server-5.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-5.0.gpg
   ```

1. Erstellen Sie die Listendatei `mongodb-org-5.0.list` für MongoDB mit dem korrekten Befehl für Ihre Ubuntu-Version.

   ```
   echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-5.0.gpg ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
   ```

1. Importieren und aktualisieren Sie die lokale Paketdatenbank mit dem folgenden Befehl:

   ```
   sudo apt-get update
   ```

1. Installieren Sie Mongosh.

   ```
   sudo apt-get install -y mongodb-mongosh
   ```

Weitere Informationen zum Installieren von früheren Versionen von MongoDB auf Ihrem Ubuntu-System finden Sie unter [Installieren von MongoDB Community Edition auf Ubuntu](https://docs.mongodb.com/v3.6/tutorial/install-mongodb-on-ubuntu/).

------
#### [ On other operating systems ]

Informationen zum Installieren der mongo-Shell auf anderen Betriebssystemen finden Sie unter [Installieren von MongoDB Community Edition](https://www.mongodb.com/docs/manual/administration/install-community/) in der MongoDB-Dokumentation.

------

### Schritt 5: Amazon DocumentDB TLS verwalten
<a name="auto-connect-ec2.tls"></a>

Laden Sie das CA-Zertifikat für Amazon DocumentDB mit dem folgenden Code herunter: `wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem` 

**Anmerkung**  
Transport Layer Security (TLS) ist standardmäßig für alle neuen Amazon DocumentDB-Cluster aktiviert. Weitere Informationen finden Sie unter [TLS-Einstellungen für Amazon DocumentDB-Cluster verwalten](https://docs.aws.amazon.com/documentdb/latest/developerguide/security.encryption.ssl.html).

### Schritt 6: Connect zu Ihrem Amazon DocumentDB-Cluster her
<a name="auto-connect-ec2.connect-use"></a>

1. Suchen Sie auf der Amazon DocumentDB DocumentDB-Konsole unter **Clusters** Ihren Cluster. Wählen Sie den Cluster aus, den Sie erstellt haben, indem Sie auf die **Cluster-ID für diesen** Cluster klicken.

1. **Suchen Sie auf der Registerkarte **Konnektivität und Sicherheit** im Feld **Connect nach Connect to this cluster with the mongo shell**:**  
![\[Cluster-Verbindungseinstellungen mit hervorgehobener MongoDB-Verbindungszeichenfolge für die Verbindung zu einem Amazon DocumentDB-Cluster mithilfe der Mongo-Shell.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/connect-mongosh.png)

   Kopieren Sie die angegebene Verbindungszeichenfolge und fügen Sie sie in Ihr Terminal ein.

   Nehmen Sie die folgenden Änderungen daran vor:

   1. Stellen Sie sicher, dass Sie den richtigen Benutzernamen in der Zeichenfolge haben.

   1. Auslassen, `<insertYourPassword>` sodass Sie beim Herstellen der Verbindung von der Mongo-Shell zur Eingabe des Passworts aufgefordert werden.

   1. Optional: Wenn Sie die IAM-Authentifizierung oder die vorherige Version der MongoDB-Shell verwenden, ändern Sie Ihre Verbindungszeichenfolge wie folgt:

      `mongo --ssl --host mydocdbcluster.cluster-cozt4xr9xv9b.us-east-1.docdb.amazonaws.com:27017 --sslCAFile global-bundle.pem --username SampleUser1 --password`

      `mydocdbcluster.cluster-cozt4xr9xv9b.us-east-1`Ersetzen Sie durch dieselben Informationen aus Ihrem Cluster.

1. Drücken Sie die Eingabetaste in Ihrem Terminal. Sie werden nun zur Eingabe Ihres Passworts aufgefordert. Geben Sie Ihr Passwort ein.

1. Wenn Sie Ihr Passwort eingeben und die `rs0 [direct: primary] <env-name>>` Aufforderung sehen, sind Sie erfolgreich mit Ihrem Amazon DocumentDB-Cluster verbunden.

Haben Sie Probleme mit der Verbindung? Weitere Informationen finden Sie unter [Fehlerbehebung bei Amazon DocumentDB](https://docs.aws.amazon.com/documentdb/latest/developerguide/troubleshooting.html).

### Schritt 7: Daten einfügen und abfragen
<a name="auto-cloud9-insert-query"></a>

Nachdem Sie nun mit Ihrem Cluster verbunden sind, können Sie einige Abfragen ausführen, um sich mit der Verwendung einer Dokumentendatenbank vertraut zu machen.

1. Um ein einzelnes Dokument einzufügen, geben Sie Folgendes ein:

   ```
   db.collection.insertOne({"hello":"DocumentDB"})
   ```

   Sie erhalten die folgende Ausgabe:

   ```
   {
     acknowledged: true,
     insertedId: ObjectId('673657216bdf6258466b128c')
   }
   ```

1. Sie können das Dokument lesen, das Sie mit dem `findOne()` Befehl geschrieben haben (weil er nur ein einziges Dokument zurückgibt). Geben Sie Folgendes ein:

   ```
   db.collection.findOne()
   ```

   Sie erhalten die folgende Ausgabe:

   ```
   { "_id" : ObjectId("5e401fe56056fda7321fbd67"), "hello" : "DocumentDB" }
   ```

1. Um ein paar weitere Abfragen durchzuführen, sollten Sie einen Anwendungsfall für Spieleprofile in Betracht ziehen. Fügen Sie zunächst einige Einträge in eine Sammlung mit dem Titel ein`profiles`. Geben Sie Folgendes ein:

   ```
   db.profiles.insertMany([{ _id: 1, name: 'Matt', status: 'active', level: 12, score: 202 }, 
         { _id: 2, name: 'Frank', status: 'inactive', level: 2, score: 9 }, 
         { _id: 3, name: 'Karen', status: 'active', level: 7, score: 87 }, 
         { _id: 4, name: 'Katie', status: 'active', level: 3, score: 27 }
   ])
   ```

   Sie erhalten die folgende Ausgabe:

   ```
   { acknowledged: true, insertedIds: { '0': 1, '1': 2, '2': 3, '3': 4 } }
   ```

1. Verwenden Sie den `find()` Befehl, um alle Dokumente in der Profilsammlung zurückzugeben. Geben Sie Folgendes ein:

   ```
   db.profiles.find()
   ```

   Sie erhalten eine Ausgabe, die den Daten entspricht, die Sie in Schritt 3 eingegeben haben.

1. Verwenden Sie mithilfe eines Filters eine Abfrage für ein einzelnes Dokument. Geben Sie Folgendes ein:

   ```
   db.profiles.find({name: "Katie"})
   ```

   Sie erhalten die folgende Ausgabe:

   ```
   { "_id" : 4, "name" : "Katie", "status": "active", "level": 3, "score":27}
   ```

1. Versuchen wir nun, ein Profil zu finden und es mit dem `findAndModify` Befehl zu ändern. Wir geben dem Benutzer Matt zusätzliche 10 Punkte mit dem folgenden Code:

   ```
   db.profiles.findAndModify({
           query: { name: "Matt", status: "active"},
           update: { $inc: { score: 10 } }
       })
   ```

   Sie erhalten die folgende Ausgabe (beachten Sie, dass sein Punktestand noch nicht gestiegen ist):

   ```
   {
       [{_id : 1, name : 'Matt', status: 'active', level: 12, score: 202}]
   ```

1. Sie können mit der folgenden Abfrage überprüfen, ob sich sein Punktestand geändert hat:

   `db.profiles.find({name: "Matt"})`

   Sie erhalten die folgende Ausgabe:

   ```
   { "_id" : 1, "name" : "Matt", "status" : "active", "level" : 12, "score" : 212 }
   ```

### Schritt 8: Erkunden
<a name="auto-connect-ec2.explore"></a>

Herzlichen Glückwunsch\$1 Sie haben die Schnellstartanleitung für Amazon DocumentDB erfolgreich abgeschlossen.

Was kommt als Nächstes? Erfahren Sie, wie Sie diese leistungsstarke Datenbank mit einigen ihrer beliebten Funktionen voll ausschöpfen können:
+  [Amazon DocumentDB verwalten](https://docs.aws.amazon.com/documentdb/latest/developerguide/managing-documentdb.html) 
+  [Skalierung](https://docs.aws.amazon.com/documentdb/latest/developerguide/operational_tasks.html) 
+  [Sichern und Wiederherstellen](https://docs.aws.amazon.com/documentdb/latest/developerguide/backup_restore.html) 

**Anmerkung**  
Um Kosten zu sparen, können Sie entweder Ihren Amazon DocumentDB-Cluster stoppen, um die Kosten zu senken, oder den Cluster löschen. Standardmäßig stoppt Ihre AWS Cloud9 Umgebung nach 30 Minuten Inaktivität die zugrunde liegende Amazon EC2 EC2-Instance.

## Automatisches Verbinden einer EC2-Instance mit einer vorhandenen Amazon DocumentDB DocumentDB-Datenbank
<a name="auto-connect-ec2-existing-cluster"></a>

Das folgende Verfahren setzt voraus, dass Sie über einen vorhandenen Amazon DocumentDB-Cluster und eine bestehende Amazon EC2 EC2-Instance verfügen.

**Greifen Sie auf Ihren Amazon DocumentDB-Cluster zu und richten Sie die Amazon EC2 EC2-Verbindung ein**

1. Greifen Sie auf Ihren Amazon DocumentDB-Cluster zu.

   1. Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die Amazon DocumentDB DocumentDB-Konsole unter [https://console.aws.amazon.com/docdb](https://console.aws.amazon.com/docdb).

   1. Klicken Sie im Navigationsbereich auf **Cluster**.
**Tipp**  
Wenn der Navigationsbereich auf der linken Seite des Bildschirms nicht angezeigt wird, wählen Sie links oben auf der Seite das Menüsymbol (![\[Hamburger menu icon with three horizontal lines.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/docdb-menu-icon.png)) aus.

   1. Geben Sie den gewünschten Cluster an, indem Sie auf die Schaltfläche links neben dem Namen des Clusters klicken.

1. Richten Sie die Amazon EC2 EC2-Verbindung ein.

   1. Wählen Sie **Aktionen** und dann **EC2-Verbindung einrichten**.  
![\[In der Dropdownliste Aktionen ist die Option EC2-Verbindung einrichten ausgewählt.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/setup-ec2-connect.png)

      Das Dialogfeld **EC2-Verbindung einrichten** wird angezeigt.

   1. Wählen Sie im Feld **EC2-Instance** die EC2-Instance aus, die Sie mit Ihrem Cluster verbinden möchten.  
![\[Die Dropdownliste EC2-Verbindungsschnittstelle einrichten mit hervorgehobener EC2-Instance.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/setup-ec2-connect-dialog.png)

   1. Klicken Sie auf **Weiter**.

      Das Dialogfeld „**Überprüfen und bestätigen**“ wird angezeigt.

   1. Vergewissern Sie sich, dass die Änderungen korrekt sind. Wählen Sie dann **Verbindung einrichten**.  
![\[Die Oberfläche „Überprüfen und Bestätigen“ zeigt eine Zusammenfassung der Änderungen an. Die Schaltfläche Verbindung einrichten befindet sich in der unteren rechten Ecke.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/setup-ec2-review-confirm.png)

Bei Erfolg wird die folgende Überprüfung angezeigt:

![\[Bestätigungsnachricht für einen erfolgreichen Verbindungsaufbau zwischen der Amazon DocumentDB DocumentDB-Datenbank und der EC2-Instance.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/setup-ec2-connect-success.png)


## Übersicht über die automatische Verbindung mit einer EC2-Instance
<a name="auto-connect-ec2.overview"></a>

Wenn Sie eine Verbindung zwischen einer EC2-Instance und einer Amazon DocumentDB-Datenbank einrichten, konfiguriert Amazon DocumentDB automatisch die VPC-Sicherheitsgruppe für Ihre EC2-Instance und für Ihre Amazon DocumentDB DocumentDB-Datenbank.

Die folgenden Anforderungen gelten für die Verbindung einer EC2-Instance mit einer Amazon DocumentDB DocumentDB-Datenbank:
+ Die EC2-Instance muss in derselben VPC wie die Amazon DocumentDB DocumentDB-Datenbank existieren.

  Wenn keine EC2-Instances in derselben VPC vorhanden sind, dann bietet die Konsole einen Link zum Erstellen einer solchen Instance.
+ Der Benutzer, der die Verbindung einrichtet, muss über Berechtigungen zum Ausführen der folgenden Amazon-EC2-Vorgänge verfügen:
  + `ec2:AuthorizeSecurityGroupEgress`
  + `ec2:AuthorizeSecurityGroupIngress`
  + `ec2:CreateSecurityGroup`
  + `ec2:DescribeInstances`
  + `ec2:DescribeNetworkInterfaces`
  + `ec2:DescribeSecurityGroups`
  + `ec2:ModifyNetworkInterfaceAttribute`
  + `ec2:RevokeSecurityGroupEgress`

Auf Ihrem Konto fallen ggf. Kosten über Availability Zones hinweg an, wenn sich die DB-Instance und die EC2-Instance in unterschiedlichen Availability Zones befinden.

Wenn Sie eine Verbindung zu einer EC2-Instance einrichten, handelt Amazon DocumentDB gemäß der aktuellen Konfiguration der Sicherheitsgruppen, die der Amazon DocumentDB DocumentDB-Datenbank und EC2-Instance zugeordnet sind, wie in der folgenden Tabelle beschrieben:


| Aktuelle Amazon DocumentDB-Sicherheitsgruppenkonfiguration | Aktuelle EC2-Sicherheitsgruppenkonfiguration | Amazon DocumentDB DocumentDB-Aktion | 
| --- | --- | --- | 
| Der Amazon DocumentDB DocumentDB-Datenbank sind eine oder mehrere Sicherheitsgruppen zugeordnet, deren Name dem Muster DocumentDB-ec2-n entspricht. Eine Sicherheitsgruppe, die dem Muster entspricht, wurde nicht geändert. Diese Sicherheitsgruppe enthält nur eine Regel für eingehenden Datenverkehr mit der VPC-Sicherheitsgruppe der EC2-Instance als Quelle. | Der EC2-Instance sind eine oder mehrere Sicherheitsgruppen zugeordnet, deren Name dem Muster entspricht DocumentDB-ec2-n (wobei n eine Zahl ist). Eine Sicherheitsgruppe, die dem Muster entspricht, wurde nicht geändert. Diese Sicherheitsgruppe hat nur eine ausgehende Regel mit der VPC-Sicherheitsgruppe der Amazon DocumentDB DocumentDB-Datenbank als Quelle. | Amazon DocumentDB ergreift keine Maßnahmen. Eine Verbindung zwischen der EC2-Instance und der Amazon DocumentDB DocumentDB-Datenbank wurde bereits automatisch konfiguriert. Da bereits eine Verbindung zwischen der EC2-Instance und der Amazon DocumentDB DocumentDB-Datenbank besteht, werden die Sicherheitsgruppen nicht geändert. | 
| Es gilt eine der folgenden Bedingungen: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/connect-ec2-auto.html)  | Es gilt eine der folgenden Bedingungen: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/connect-ec2-auto.html) | Amazon DocumentDB DocumentDB-Aktion: Neue Sicherheitsgruppen erstellen | 
| Der Amazon DocumentDB DocumentDB-Datenbank sind eine oder mehrere Sicherheitsgruppen zugeordnet, deren Name dem Muster DocumentDB-ec2-n entspricht. Eine Sicherheitsgruppe, die dem Muster entspricht, wurde nicht geändert. Diese Sicherheitsgruppe enthält nur eine Regel für eingehenden Datenverkehr mit der VPC-Sicherheitsgruppe der EC2-Instance als Quelle. | Der EC2-Instance sind eine oder mehrere Sicherheitsgruppen zugeordnet, deren Name dem Muster ec2-DocumentDB-n entspricht. Amazon DocumentDB kann jedoch keine dieser Sicherheitsgruppen für die Verbindung mit der Amazon DocumentDB DocumentDB-Datenbank verwenden. Amazon DocumentDB kann keine Sicherheitsgruppe verwenden, die keine einzige ausgehende Regel mit der VPC-Sicherheitsgruppe der Amazon DocumentDB DocumentDB-Datenbank als Quelle hat. Amazon DocumentDB kann auch keine Sicherheitsgruppe verwenden, die geändert wurde. | Amazon DocumentDB DocumentDB-Aktion: Neue Sicherheitsgruppen erstellen | 
| Der Amazon DocumentDB DocumentDB-Datenbank sind eine oder mehrere Sicherheitsgruppen zugeordnet, deren Name dem Muster DocumentDB-ec2-n entspricht. Eine Sicherheitsgruppe, die dem Muster entspricht, wurde nicht geändert. Diese Sicherheitsgruppe enthält nur eine Regel für eingehenden Datenverkehr mit der VPC-Sicherheitsgruppe der EC2-Instance als Quelle. | Eine gültige EC2-Sicherheitsgruppe für die Verbindung ist vorhanden, jedoch nicht mit der EC2-Instance verknüpft. Die Sicherheitsgruppe trägt einen Namen, der dem Muster DocumentDB-ec2-n entspricht. Sie wurde nicht geändert. Es gibt nur eine ausgehende Regel mit der VPC-Sicherheitsgruppe der Amazon DocumentDB DocumentDB-Datenbank als Quelle. | Amazon DocumentDB DocumentDB-Aktion: EC2-Sicherheitsgruppe zuordnen | 
| Es gilt eine der folgenden Bedingungen: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/connect-ec2-auto.html)  | Der EC2-Instance sind eine oder mehrere Sicherheitsgruppen zugeordnet, deren Name dem Muster DocumentDB-ec2-n entspricht. Eine Sicherheitsgruppe, die dem Muster entspricht, wurde nicht geändert. Diese Sicherheitsgruppe hat nur eine ausgehende Regel mit der VPC-Sicherheitsgruppe der Amazon DocumentDB DocumentDB-Datenbank als Quelle. | Amazon DocumentDB DocumentDB-Aktion: Neue Sicherheitsgruppen erstellen | 

**Amazon DocumentDB DocumentDB-Aktion: Neue Sicherheitsgruppen erstellen**

Amazon DocumentDB ergreift die folgenden Aktionen:
+ Erstellt eine neue Sicherheitsgruppe, die dem Muster `DocumentDB-ec2-n` entspricht. Diese Sicherheitsgruppe enthält eine Regel für eingehenden Datenverkehr mit der VPC-Sicherheitsgruppe der EC2-Instance als Quelle. Diese Sicherheitsgruppe ist mit der Amazon DocumentDB DocumentDB-Datenbank verknüpft und ermöglicht der EC2-Instance den Zugriff auf die Amazon DocumentDB DocumentDB-Datenbank.
+ Erstellt eine neue Sicherheitsgruppe, die dem Muster `ec2-DocumentDB-n` entspricht. Diese Sicherheitsgruppe hat eine ausgehende Regel mit der VPC-Sicherheitsgruppe der Amazon DocumentDB DocumentDB-Datenbank als Quelle. Diese Sicherheitsgruppe ist der EC2-Instance zugeordnet und ermöglicht der EC2-Instance, Traffic an die Amazon DocumentDB DocumentDB-Datenbank zu senden.

**Amazon DocumentDB DocumentDB-Aktion: EC2-Sicherheitsgruppe zuordnen**

Amazon DocumentDB ordnet die gültige, bestehende EC2-Sicherheitsgruppe der EC2-Instance zu. Diese Sicherheitsgruppe ermöglicht es der EC2-Instance, Datenverkehr an die Amazon DocumentDB DocumentDB-Datenbank zu senden.

## Anzeigen verbundener Rechenressourcen
<a name="auto-connect-ec2.compute"></a>

Sie können den verwenden AWS-Managementkonsole , um die Rechenressourcen anzuzeigen, die mit einer Amazon DocumentDB DocumentDB-Datenbank verbunden sind. Zu den angezeigten Ressourcen gehören Rechenressourcenverbindungen, die automatisch eingerichtet wurden. Sie können die Konnektivität mit Rechenressourcen auf folgende Weise automatisch einrichten:
+ Sie können die Rechenressource auswählen, wenn Sie die Datenbank erstellen. Weitere Informationen finden Sie unter [Einen Amazon DocumentDB-Cluster erstellen](db-cluster-create.md) und Einen Multi-AZ-DB-Cluster erstellen. 
+ Sie können die Konnektivität zwischen einer vorhandenen Datenbank und einer Rechenressource einrichten. Weitere Informationen finden Sie unter [Amazon EC2 automatisch Connect](#connect-ec2-auto). 

Die aufgelisteten Rechenressourcen enthalten keine Ressourcen, die manuell mit der Datenbank verbunden wurden. Sie können beispielsweise einer Rechenressource den manuellen Zugriff auf eine Datenbank erlauben, indem Sie der VPC-Sicherheitsgruppe, die der Datenbank zugeordnet ist, eine Regel hinzufügen.

Für die Auflistung einer Rechenressource müssen die folgenden Bedingungen erfüllt sei:
+ Der Name der Sicherheitsgruppe, die der Rechenressource zugeordnet ist, entspricht dem Muster `ec2-DocumentDB-n` (wobei n eine Zahl ist).
+ Die mit der Rechenressource verknüpfte Sicherheitsgruppe hat eine ausgehende Regel, bei der der Portbereich auf den Port festgelegt ist, den die Amazon DocumentDB DocumentDB-Datenbank verwendet.
+ Die mit der Rechenressource verknüpfte Sicherheitsgruppe hat eine ausgehende Regel, bei der die Quelle auf eine Sicherheitsgruppe gesetzt ist, die der Amazon DocumentDB DocumentDB-Datenbank zugeordnet ist.
+ Der Name der Sicherheitsgruppe, die mit der Amazon DocumentDB DocumentDB-Datenbank verknüpft ist, entspricht dem Muster `DocumentDB-ec2-n` (wobei n eine Zahl ist).
+ Die mit der Amazon DocumentDB DocumentDB-Datenbank verknüpfte Sicherheitsgruppe hat eine Eingangsregel, bei der der Portbereich auf den Port festgelegt ist, den die Amazon DocumentDB DocumentDB-Datenbank verwendet.
+ Die mit der Amazon DocumentDB DocumentDB-Datenbank verknüpfte Sicherheitsgruppe hat eine Eingangsregel, bei der die Quelle auf eine Sicherheitsgruppe gesetzt ist, die der Rechenressource zugeordnet ist.

**Um Rechenressourcen anzuzeigen, die mit einer Amazon DocumentDB DocumentDB-Datenbank verbunden sind**

1. Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die Amazon DocumentDB DocumentDB-Konsole unter [https://console.aws.amazon.com/docdb](https://console.aws.amazon.com/docdb).

1. Wählen Sie im Navigationsbereich **Datenbanken** und dann den Namen der Amazon DocumentDB DocumentDB-Datenbank aus.

1. Sehen Sie sich auf der Registerkarte **Konnektivität und Sicherheit** die Rechenressourcen im Abschnitt **Verbundene Rechenressourcen** an.

# Manuelles Connect von Amazon EC2
<a name="connect-ec2-manual"></a>

**Topics**
+ [

## Schritt 1: Erstellen Sie eine Amazon EC2 EC2-Instance
](#manual-connect-ec2.launch-ec2-instance)
+ [

## Schritt 2: Erstellen einer Sicherheitsgruppe
](#manual-connect-ec2.security-group)
+ [

## Schritt 3: Erstellen Sie einen Amazon DocumentDB-Cluster
](#manual-connect-ec2.launch-cluster)
+ [

## Schritt 4: Connect zu Ihrer Amazon EC2 EC2-Instance her
](#manual-connect-ec2.connect)
+ [

## Schritt 5: Installieren Sie die MongoDB-Shell
](#manual-connect-ec2.install-mongo-shell)
+ [

## Schritt 6: Amazon DocumentDB TLS verwalten
](#manual-connect-ec2.tls)
+ [

## Schritt 7: Connect zu Ihrem Amazon DocumentDB-Cluster her
](#manual-connect-ec2.connect-use)
+ [

## Schritt 8: Daten einfügen und abfragen
](#manual-cloud9-insert-query)
+ [

## Schritt 9: Erkunden
](#manual-connect-ec2.explore)

Bei den folgenden Schritten wird davon ausgegangen, dass Sie die Schritte im [Voraussetzungen](connect-ec2.md#connect-ec2-prerequisites) Thema abgeschlossen haben.

## Schritt 1: Erstellen Sie eine Amazon EC2 EC2-Instance
<a name="manual-connect-ec2.launch-ec2-instance"></a>

In diesem Schritt erstellen Sie eine Amazon EC2 EC2-Instance in derselben Region und Amazon VPC, die Sie später für die Bereitstellung Ihres Amazon DocumentDB-Clusters verwenden werden. 

1. Wählen Sie auf der Amazon EC2 EC2-Konsole **Launch instance** aus.  
![\[Der Abschnitt Launch Instance auf der Amazon EC2 EC2-Konsole.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/launch-instance.png)

1. Geben Sie einen Namen oder eine Kennung in das Feld **Name** im Abschnitt **Name und Tags** ein.

1. Suchen Sie in der Dropdownliste **Amazon Machine Image (AMI)** nach **Amazon Linux 2 AMI** und wählen Sie es aus.  
![\[Die Anwendungs- und Betriebssystem-Images bieten eine Schnittstelle mit der Amazon Linux 2 AMI-Option, die im Abschnitt Schnellstart ausgewählt wurde.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/linux2-ami.png)

1. Suchen Sie in der Dropdownliste **Instance-Typ** nach **t3.micro** und wählen Sie es aus.

1. Geben Sie im Abschnitt **key pair (Anmeldung)** die Kennung eines vorhandenen Schlüsselpaars ein, oder wählen Sie **Neues Schlüsselpaar erstellen**.  
![\[Die Schlüsselpaar-Schnittstelle mit dem Feld für den Namen des key pair und der Option Neues key pair erstellen.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/key-pair.png)

   Sie müssen ein Amazon EC2 EC2-Schlüsselpaar angeben.
   + Wenn Sie ein Amazon EC2 EC2-Schlüsselpaar haben:

     1. Wählen Sie ein key pair aus, wählen Sie Ihr key pair aus der Liste.

     1. Sie müssen die private Schlüsseldatei (.pem- oder .ppk-Datei) bereits verfügbar haben, um sich bei Ihrer Amazon EC2 EC2-Instance anmelden zu können.
   + Wenn Sie kein Amazon EC2 EC2-Schlüsselpaar haben:

     1. Wählen Sie **Neues key pair** **erstellen. Daraufhin wird das Dialogfeld key pair** erstellen angezeigt.

     1. Geben Sie einen Namen in das Feld **Name des Schlüsselpaars** ein.

     1. Wählen Sie den **Schlüsselpaartyp** und das **Dateiformat für den privaten Schlüssel**. 

     1. Wählen Sie **Create Key Pair (Schlüsselpaar erstellen)** aus.  
![\[Die Schnittstelle key pair erstellen mit Feldern für den Namen, den Typ und das Dateiformat des key pair. Die Schaltfläche key pair erstellen befindet sich in der unteren rechten Ecke.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/create-key-pair.png)
**Anmerkung**  
Aus Sicherheitsgründen empfehlen wir dringend, ein Schlüsselpaar sowohl für die SSH- als auch für die Internetverbindung zu Ihrer EC2-Instance zu verwenden.

1. Wählen Sie im **Abschnitt Netzwerkeinstellungen** unter **Firewall (Sicherheitsgruppen)** entweder Sicherheitsgruppe **erstellen oder Bestehende Sicherheitsgruppe** **auswählen aus**.  
![\[Die Oberfläche mit den Netzwerkeinstellungen zeigt Optionen zum Erstellen einer Sicherheitsgruppe.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/firewall.png)

   Wenn Sie eine bestehende Sicherheitsgruppe auswählen möchten, wählen Sie eine aus der Dropdownliste **Allgemeine Sicherheitsgruppen** aus.

   Wenn Sie eine neue Sicherheitsgruppe erstellen möchten, gehen Sie wie folgt vor:

   1. Überprüfen Sie alle Regeln für die Zulassung von Datenverkehr, die für Ihre EC2-Konnektivität gelten.

   1. Wählen Sie im Feld IP die Option **Meine IP** oder **Benutzerdefiniert** aus, um aus einer Liste von CIDR-Blöcken, Präfixlisten oder Sicherheitsgruppen auszuwählen. Wir empfehlen **Anywhere** nicht als Wahl, es sei denn, Ihre EC2-Instance befindet sich in einem isolierten Netzwerk, da sie beliebigen IP-Adressen den Zugriff auf Ihre EC2-Instance ermöglicht.  
![\[Das Drop-down-Menü „Meine IP“.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/ip-field.png)

1. Überprüfen Sie im Abschnitt **Zusammenfassung** Ihre EC2-Konfiguration und wählen Sie, falls korrekt, die Option **Launch instance** aus.

## Schritt 2: Erstellen einer Sicherheitsgruppe
<a name="manual-connect-ec2.security-group"></a>

Sie werden jetzt eine neue Sicherheitsgruppe in Ihrer Standard-Amazon-VPC erstellen. Die Sicherheitsgruppe `demoDocDB` ermöglicht es Ihnen, von Ihrer Amazon EC2-Instance aus eine Verbindung zu Ihrem Amazon DocumentDB-Cluster auf Port 27017 (dem Standardport für Amazon DocumentDB) herzustellen. 

1. Wählen Sie in der [Amazon EC2 Management Console](https://console.aws.amazon.com/ec2) unter **Netzwerk und Sicherheit** die Option **Sicherheitsgruppen** aus.  
![\[Navigationsbereich der Amazon DocumentDB DocumentDB-Konsole mit der in der Dropdownliste Netzwerk und Sicherheit ausgewählten Option „Sicherheitsgruppen“.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/nav-security-groups.png)

1. Wählen Sie **Sicherheitsgruppe erstellen** aus.  
![\[Die Schaltfläche Sicherheitsgruppe erstellen.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/create-sg-btn-2.png)

1. Gehen Sie im Abschnitt **Grundlegende Details** wie folgt vor:

   1. Geben Sie für **Security group name** (Name der Sicherheitsgruppe) `demoDocDB` ein.

   1. Geben Sie im Feld **Description (Beschreibung)** eine Beschreibung ein.

   1. Akzeptieren Sie für **VPC** die Verwendung Ihrer Standard-VPC.

1. Wählen Sie im Abschnitt **Eingehende Regeln** die Option **Regel hinzufügen** aus.

   1. Wählen Sie für **Typ** die Option **Benutzerdefinierte TCP-Regel** (Standard) aus.

   1. Geben Sie für **Portbereich** den Wert ein`27017`.

   1. Wählen Sie für **Source (Quelle)** die Option **Custom (Benutzerdefiniert)** aus. Suchen Sie im Feld daneben nach der Sicherheitsgruppe, die Sie gerade in Schritt 1 erstellt haben. Möglicherweise müssen Sie Ihren Browser aktualisieren, damit die Amazon EC2 EC2-Konsole den Quellnamen automatisch ausfüllt.  
![\[Abschnitt mit Regeln für eingehende Nachrichten mit Feldern für Typ, Protokoll, Portbereich, Quelle und Beschreibung. Die Schaltfläche Regel hinzufügen befindet sich in der unteren linken Ecke.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/inbound-rules.png)

1. Akzeptieren Sie alle anderen Standardeinstellungen und wählen Sie Sicherheitsgruppe **erstellen** aus.  
![\[Die Schaltfläche Sicherheitsgruppe erstellen.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/create-sg-btn-2.png)

## Schritt 3: Erstellen Sie einen Amazon DocumentDB-Cluster
<a name="manual-connect-ec2.launch-cluster"></a>

Während die Amazon EC2 EC2-Instance bereitgestellt wird, erstellen Sie Ihren Amazon DocumentDB-Cluster. 

1. Navigieren Sie zur Amazon DocumentDB DocumentDB-Konsole und wählen Sie im Navigationsbereich **Clusters** aus.

1. Wählen Sie **Erstellen** aus.

1. Belassen Sie die Standardeinstellung für den **Clustertyp** **auf Instance Based Cluster**.

1. Geben Sie in **Clusterkonfiguration** für **Cluster-ID** einen eindeutigen Namen ein. Beachten Sie, dass die Konsole alle Clusternamen unabhängig davon, wie sie eingegeben wurden, in Kleinbuchstaben ändert.

   **Behalten Sie für die **Engine-Version** den Standardwert 5.0.0 bei.**

1. Behalten Sie für die **Cluster-Speicherkonfiguration** die Standardeinstellung von **Amazon DocumentDB Standard** bei.

1. In der **Instanzkonfiguration**:
   + Wählen Sie für **DB-Instance-Klasse** die Option **Speicheroptimierte Klassen (einschließlich R-Klassen)** aus (dies ist die Standardeinstellung).

     Bei der anderen Instance-Option handelt es sich um **Klassen mit NVMe -backed.** Weitere Informationen hierzu finden Sie unter [NVMe-gestützte Instances](db-instance-nvme.md).
   + Wählen Sie für **Instance-Klasse** den Instance-Typ aus, der Ihren Anforderungen entspricht. Eine detailliertere Erläuterung der Instanzklassen finden Sie unter[Spezifikationen der Instanzklasse](db-instance-classes.md#db-instance-class-specs).
   + Wählen Sie für **die Anzahl der Instances** eine Zahl aus, die Ihren Anforderungen am besten entspricht. Denken Sie daran, je niedriger die Anzahl, desto niedriger die Kosten und desto geringer das read/write Volumen, das vom Cluster verwaltet werden kann.  
![\[Konfigurationsoberfläche mit Standardwerten für Cluster-ID, Engine-Version und Instanzklasse, wobei die Anzahl der Instanzen auf eins festgelegt ist.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/create-cluster/instance-config.png)

1. Behalten Sie für **Konnektivität** die Standardeinstellung „**Keine Verbindung zu einer EC2-Rechenressource** herstellen“ bei.
**Anmerkung**  
Wenn Sie eine Verbindung zu einer EC2-Rechenressource herstellen, werden automatisch Sicherheitsgruppen für Ihre Verbindung zu Ihrem Cluster erstellt. Da Sie diese Sicherheitsgruppen im vorherigen Schritt manuell erstellt haben, sollten Sie „**Keine Verbindung zu einer EC2-Rechenressource** herstellen“ auswählen, um keinen zweiten Satz von Sicherheitsgruppen zu erstellen.

1. Geben Sie im Abschnitt **Authentifizierung** einen Benutzernamen für den Hauptbenutzer ein und wählen Sie dann **Selbstverwaltet** aus. Geben Sie ein Passwort ein und bestätigen Sie es.

   Wenn Sie stattdessen **Verwaltet in** wählen AWS Secrets Manager, finden Sie [Passwortverwaltung mit Amazon DocumentDB und AWS Secrets Manager](docdb-secrets-manager.md) weitere Informationen unter.

1. Wählen Sie **Cluster erstellen**.

## Schritt 4: Connect zu Ihrer Amazon EC2 EC2-Instance her
<a name="manual-connect-ec2.connect"></a>

Wenn Sie eine Verbindung zu Ihrer Amazon EC2 EC2-Instance herstellen, können Sie die MongoDB-Shell installieren. Durch die Installation der Mongo-Shell können Sie eine Verbindung zu Ihrem Amazon DocumentDB-Cluster herstellen und ihn abfragen. Führen Sie folgende Schritte aus:

1. Navigieren Sie auf der Amazon EC2 EC2-Konsole zu Ihren Instances und überprüfen Sie, ob die gerade erstellte Instance läuft. Wenn ja, wählen Sie die Instance aus, indem Sie auf die Instance-ID klicken.  
![\[Instance-Tabelle mit zwei Instances auf der Amazon EC2 EC2-Konsole.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/ec2-instance-table.png)

1. Wählen Sie **Connect** aus.  
![\[Instanzzusammenfassung für eine Amazon EC2 EC2-Instance. Die Schaltfläche Connect befindet sich in der oberen rechten Ecke.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/ec2-instance-summary.png)

1. Es gibt vier Optionen mit Registerkarten für Ihre Verbindungsmethode: Amazon EC2 Instance Connect, Session Manager, SSH-Client oder serielle EC2-Konsole. Sie müssen eine auswählen und deren Anweisungen befolgen. Wenn Sie fertig sind, wählen Sie **Connect**.  
![\[Schnittstelle mit Konfigurationsoptionen für die EC2 Instance Connect-Verbindungsmethode.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ec2/connect-options.png)

**Anmerkung**  
Wenn sich Ihre IP-Adresse geändert hat, nachdem Sie diesen Walkthrough gestartet haben, oder wenn Sie zu einem späteren Zeitpunkt zu Ihrer Umgebung zurückkehren, müssen Sie Ihre `demoEC2` Sicherheitsgruppenregel für eingehenden Datenverkehr aktualisieren, um eingehenden Datenverkehr von Ihrer neuen API-Adresse aus zu ermöglichen.

## Schritt 5: Installieren Sie die MongoDB-Shell
<a name="manual-connect-ec2.install-mongo-shell"></a>

Sie können jetzt die MongoDB-Shell installieren. Dabei handelt es sich um ein Befehlszeilenprogramm, mit dem Sie eine Verbindung herstellen und Ihren Amazon DocumentDB-Cluster abfragen können. Derzeit gibt es zwei Versionen der MongoDB-Shell: die neueste Version, Mongosh, und die vorherige Version, Mongo-Shell.

**Wichtig**  
Es gibt eine bekannte Einschränkung bei Treibern von Node.js, die älter als Version 6.13.1 sind und die derzeit nicht von der IAM-Identitätsauthentifizierung für Amazon DocumentDB unterstützt werden. Die Treiber und Tools der Datei Node.js, die den Treiber Node.js verwenden (z. B. mongosh), müssen aktualisiert werden, sodass sie den Treiber Node.js der Version 6.13.1 oder höher verwenden.

Folgen Sie den nachstehenden Anweisungen, um die MongoDB-Shell für Ihr Betriebssystem zu installieren.

------
#### [ On Amazon Linux ]

**So installieren Sie die MongoDB-Shell auf Amazon Linux**

Wenn Sie IAM *nicht* verwenden und die neueste MongoDB-Shell (mongosh) verwenden möchten, um eine Verbindung zu Ihrem Amazon DocumentDB-Cluster herzustellen, gehen Sie wie folgt vor:

1. Erstellen Sie die Repository-Datei. Führen Sie in der Befehlszeile Ihrer EC2-Instance, die Sie erstellt haben, den folgenden Befehl aus:

   ```
   echo -e "[mongodb-org-5.0] \nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/amazon/2023/mongodb-org/5.0/x86_64/\ngpgcheck=1 \nenabled=1 \ngpgkey=https://pgp.mongodb.com/server-5.0.asc" | sudo tee /etc/yum.repos.d/mongodb-org-5.0.repo
   ```

1. Wenn der Vorgang abgeschlossen ist, installieren Sie mongosh mit einer der beiden folgenden Befehlsoptionen an der Befehlszeile:

   **Option 1** — Wenn Sie während der Amazon EC2-Konfiguration das standardmäßige Amazon Linux 2023 ausgewählt haben, geben Sie diesen Befehl ein:

   ```
   sudo yum install -y mongodb-mongosh-shared-openssl3
   ```

   **Option 2** — Wenn Sie bei der Amazon EC2-Konfiguration Amazon Linux 2 ausgewählt haben, geben Sie diesen Befehl ein:

   ```
   sudo yum install -y mongodb-mongosh
   ```

Wenn Sie IAM verwenden, müssen Sie die vorherige Version der MongoDB-Shell (5.0) verwenden, um eine Verbindung zu Ihrem Amazon DocumentDB-Cluster herzustellen. Gehen Sie wie folgt vor:

1. Erstellen Sie die Repository-Datei. Führen Sie in der Befehlszeile Ihrer EC2-Instance, die Sie erstellt haben, den folgenden Befehl aus:

   ```
   echo -e "[mongodb-org-5.0] \nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/amazon/2023/mongodb-org/5.0/x86_64/\ngpgcheck=1 \nenabled=1 \ngpgkey=https://pgp.mongodb.com/server-5.0.asc" | sudo tee /etc/yum.repos.d/mongodb-org-5.0.repo
   ```

1. Wenn der Vorgang abgeschlossen ist, installieren Sie die Mongodb 5.0-Shell mit der folgenden Befehlsoption an der Befehlszeile:

   ```
   sudo yum install -y mongodb-org-shell
   ```

------
#### [ On Ubuntu ]

**Um mongosh auf Ubuntu zu installieren**

1. Importieren Sie den öffentlichen Schlüssel, der von dem Paketverwaltungssystem verwendet wird.

   ```
   curl -fsSL https://pgp.mongodb.com/server-5.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-5.0.gpg
   ```

1. Erstellen Sie die Listendatei `mongodb-org-5.0.list` für MongoDB mit dem korrekten Befehl für Ihre Ubuntu-Version.

   ```
   echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-5.0.gpg ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
   ```

1. Importieren und aktualisieren Sie die lokale Paketdatenbank mit dem folgenden Befehl:

   ```
   sudo apt-get update
   ```

1. Installieren Sie Mongosh.

   ```
   sudo apt-get install -y mongodb-mongosh
   ```

Weitere Informationen zum Installieren von früheren Versionen von MongoDB auf Ihrem Ubuntu-System finden Sie unter [Installieren von MongoDB Community Edition auf Ubuntu](https://docs.mongodb.com/v3.6/tutorial/install-mongodb-on-ubuntu/).

------
#### [ On other operating systems ]

Informationen zum Installieren der mongo-Shell auf anderen Betriebssystemen finden Sie unter [Installieren von MongoDB Community Edition](https://www.mongodb.com/docs/manual/administration/install-community/) in der MongoDB-Dokumentation.

------

## Schritt 6: Amazon DocumentDB TLS verwalten
<a name="manual-connect-ec2.tls"></a>

Laden Sie das CA-Zertifikat für Amazon DocumentDB mit dem folgenden Code herunter: `wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem` 

**Anmerkung**  
Transport Layer Security (TLS) ist standardmäßig für alle neuen Amazon DocumentDB-Cluster aktiviert. Weitere Informationen finden Sie unter [TLS-Einstellungen für Amazon DocumentDB-Cluster verwalten](https://docs.aws.amazon.com/documentdb/latest/developerguide/security.encryption.ssl.html).

## Schritt 7: Connect zu Ihrem Amazon DocumentDB-Cluster her
<a name="manual-connect-ec2.connect-use"></a>

1. Suchen Sie auf der Amazon DocumentDB DocumentDB-Konsole unter **Clusters** Ihren Cluster. Wählen Sie den Cluster aus, den Sie erstellt haben, indem Sie auf die **Cluster-ID für diesen** Cluster klicken.  
![\[Amazon DocumentDB-Clusterliste mit einem regionalen Cluster mit Details zur primären Instanz.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/cluster-connect-choose.png)

1. **Suchen Sie auf der Registerkarte **Konnektivität und Sicherheit** im Feld **Connect nach Connect to this cluster with the mongo shell**:**  
![\[Cluster-Verbindungseinstellungen mit hervorgehobener MongoDB-Verbindungszeichenfolge für die Verbindung zu einem Amazon DocumentDB-Cluster mithilfe der Mongo-Shell.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/connect-mongosh.png)

   Kopieren Sie die angegebene Verbindungszeichenfolge und fügen Sie sie in Ihr Terminal ein.

   Nehmen Sie die folgenden Änderungen daran vor:

   1. Stellen Sie sicher, dass Sie den richtigen Benutzernamen in der Zeichenfolge haben.

   1. Auslassen, `<insertYourPassword>` sodass Sie beim Herstellen der Verbindung von der Mongo-Shell zur Eingabe des Passworts aufgefordert werden.

   1. Optional: Wenn Sie die IAM-Authentifizierung oder die vorherige Version der MongoDB-Shell verwenden, ändern Sie Ihre Verbindungszeichenfolge wie folgt:

      `mongo --ssl --host mydocdbcluster.cluster-cozt4xr9xv9b.us-east-1.docdb.amazonaws.com:27017 --sslCAFile global-bundle.pem --username SampleUser1 --password`

      `mydocdbcluster.cluster-cozt4xr9xv9b.us-east-1`Ersetzen Sie durch dieselben Informationen aus Ihrem Cluster.

1. Drücken Sie die Eingabetaste in Ihrem Terminal. Sie werden nun zur Eingabe Ihres Passworts aufgefordert. Geben Sie Ihr Passwort ein.

1. Wenn Sie Ihr Passwort eingeben und die `rs0 [direct: primary] <env-name>>` Aufforderung sehen, sind Sie erfolgreich mit Ihrem Amazon DocumentDB-Cluster verbunden.

Haben Sie Probleme mit der Verbindung? Weitere Informationen finden Sie unter [Fehlerbehebung bei Amazon DocumentDB](https://docs.aws.amazon.com/documentdb/latest/developerguide/troubleshooting.html).

## Schritt 8: Daten einfügen und abfragen
<a name="manual-cloud9-insert-query"></a>

Nachdem Sie nun mit Ihrem Cluster verbunden sind, können Sie einige Abfragen ausführen, um sich mit der Verwendung einer Dokumentendatenbank vertraut zu machen.

1. Um ein einzelnes Dokument einzufügen, geben Sie Folgendes ein:

   ```
   db.collection.insertOne({"hello":"DocumentDB"})
   ```

   Sie erhalten die folgende Ausgabe:

   ```
   {
     acknowledged: true,
     insertedId: ObjectId('673657216bdf6258466b128c')
   }
   ```

1. Sie können das Dokument lesen, das Sie mit dem `findOne()` Befehl geschrieben haben (weil er nur ein einziges Dokument zurückgibt). Geben Sie Folgendes ein:

   ```
   db.collection.findOne()
   ```

   Sie erhalten die folgende Ausgabe:

   ```
   { "_id" : ObjectId("5e401fe56056fda7321fbd67"), "hello" : "DocumentDB" }
   ```

1. Um ein paar weitere Abfragen durchzuführen, sollten Sie einen Anwendungsfall für Spieleprofile in Betracht ziehen. Fügen Sie zunächst einige Einträge in eine Sammlung mit dem Titel ein`profiles`. Geben Sie Folgendes ein:

   ```
   db.profiles.insertMany([{ _id: 1, name: 'Matt', status: 'active', level: 12, score: 202 }, 
         { _id: 2, name: 'Frank', status: 'inactive', level: 2, score: 9 }, 
         { _id: 3, name: 'Karen', status: 'active', level: 7, score: 87 }, 
         { _id: 4, name: 'Katie', status: 'active', level: 3, score: 27 }
   ])
   ```

   Sie erhalten die folgende Ausgabe:

   ```
   { acknowledged: true, insertedIds: { '0': 1, '1': 2, '2': 3, '3': 4 } }
   ```

1. Verwenden Sie den `find()` Befehl, um alle Dokumente in der Profilsammlung zurückzugeben. Geben Sie Folgendes ein:

   ```
   db.profiles.find()
   ```

   Sie erhalten eine Ausgabe, die den Daten entspricht, die Sie in Schritt 3 eingegeben haben.

1. Verwenden Sie mithilfe eines Filters eine Abfrage für ein einzelnes Dokument. Geben Sie Folgendes ein:

   ```
   db.profiles.find({name: "Katie"})
   ```

   Sie erhalten die folgende Ausgabe:

   ```
   { "_id" : 4, "name" : "Katie", "status": "active", "level": 3, "score":27}
   ```

1. Versuchen wir nun, ein Profil zu finden und es mit dem `findAndModify` Befehl zu ändern. Wir geben dem Benutzer Matt zusätzliche 10 Punkte mit dem folgenden Code:

   ```
   db.profiles.findAndModify({
           query: { name: "Matt", status: "active"},
           update: { $inc: { score: 10 } }
       })
   ```

   Sie erhalten die folgende Ausgabe (beachten Sie, dass sein Punktestand noch nicht gestiegen ist):

   ```
   {
       [{_id : 1, name : 'Matt', status: 'active', level: 12, score: 202}]
   ```

1. Sie können mit der folgenden Abfrage überprüfen, ob sich sein Punktestand geändert hat:

   `db.profiles.find({name: "Matt"})`

   Sie erhalten die folgende Ausgabe:

   ```
   { "_id" : 1, "name" : "Matt", "status" : "active", "level" : 12, "score" : 212 }
   ```

## Schritt 9: Erkunden
<a name="manual-connect-ec2.explore"></a>

Herzlichen Glückwunsch\$1 Sie haben die Schnellstartanleitung für Amazon DocumentDB erfolgreich abgeschlossen.

Was kommt als Nächstes? Erfahren Sie, wie Sie diese leistungsstarke Datenbank mit einigen ihrer beliebten Funktionen voll ausschöpfen können:
+  [Amazon DocumentDB verwalten](https://docs.aws.amazon.com/documentdb/latest/developerguide/managing-documentdb.html) 
+  [Skalierung](https://docs.aws.amazon.com/documentdb/latest/developerguide/operational_tasks.html) 
+  [Sichern und Wiederherstellen](https://docs.aws.amazon.com/documentdb/latest/developerguide/backup_restore.html) 

**Anmerkung**  
Um Kosten zu sparen, können Sie entweder Ihren Amazon DocumentDB-Cluster stoppen, um die Kosten zu senken, oder den Cluster löschen. Standardmäßig stoppt Ihre AWS Cloud9 Umgebung nach 30 Minuten Inaktivität die zugrunde liegende Amazon EC2 EC2-Instance.

# Stellen Sie mithilfe des Amazon DocumentDB DocumentDB-JDBC-Treibers eine Verbindung her
<a name="connect-jdbc"></a>

Der JDBC-Treiber für Amazon DocumentDB bietet Entwicklern eine relationale SQL-Schnittstelle und ermöglicht die Konnektivität von BI-Tools wie Tableau und. DbVisualizer

Weitere Informationen finden Sie in der [Amazon DocumentDB DocumentDB-JDBC-Treiber-Dokumentation](https://github.com/aws/amazon-documentdb-jdbc-driver/blob/develop/src/markdown/index.md) unter. GitHub

**Topics**
+ [

## Erste Schritte
](#connect-jdbc-gettingstarted)
+ [

# Stellen Sie von Tableau Desktop aus eine Connect zu Amazon DocumentDB her
](connect-jdbc-tableau.md)
+ [

# Connect zu Amazon DocumentDB her von DbVisualizer
](connect-jdbc-DbVisualizer.md)
+ [

# Automatische JDBC-Schemagenerierung
](connect-jdbc-autoschemagen.md)
+ [

# SQL-Unterstützung und Einschränkungen
](connect-jdbc-sqlandlimits.md)
+ [

# Fehlerbehebung
](connect-jdbc-troubleshooting.md)

## Erste Schritte
<a name="connect-jdbc-gettingstarted"></a>

**Schritt 1. Amazon DocumentDB-Cluster erstellen**  
Wenn Sie keinen Amazon DocumentDB-Cluster erstellt haben, erstellen Sie einen anhand der Anweisungen im Abschnitt [Erste Schritte](https://docs.aws.amazon.com/documentdb/latest/developerguide/get-started-guide.html) im Amazon DocumentDB DocumentDB-Entwicklerhandbuch.  
Amazon DocumentDB ist ein reiner Virtual Private Cloud (VPC) -Service. Wenn Sie eine Verbindung von einem lokalen Computer außerhalb der VPC des Clusters herstellen, müssen Sie eine SSH-Verbindung zu einer Amazon EC2 EC2-Instance herstellen. Starten Sie in diesem Fall Ihren Cluster anhand der Anweisungen unter [Connect with EC2](https://docs.aws.amazon.com/documentdb/latest/developerguide/connect-ec2.html). Weitere Informationen [zum SSH-Tunneling und wann Sie es möglicherweise benötigen, finden Sie unter Verwenden eines SSH-Tunnels zum Herstellen einer Connect zu Amazon DocumentDB](https://github.com/aws/amazon-documentdb-jdbc-driver/blob/develop/src/markdown/setup/setup.md#using-an-ssh-tunnel-to-connect-to-amazon-documentdb). 

**Schritt 2. JRE- oder JDK-Installation**  
Abhängig von Ihrer BI-Anwendung müssen Sie möglicherweise sicherstellen, dass eine 64-Bit-JRE- oder JDK-Installationsversion 8 oder höher auf Ihrem Computer installiert ist. [Sie können das Java SE Runtime Environment 8 hier herunterladen.](https://www.oracle.com/ca-en/java/technologies/javase-jre8-downloads.html)

**Schritt 3. Laden Sie den DocumentDB JDBC-Treiber herunter**  
[Laden Sie den DocumentDB-JDBC-Treiber von hier herunter.](https://github.com/aws/amazon-documentdb-jdbc-driver/releases) Der Treiber ist als einzelne JAR-Datei verpackt (z. B. documentdb-jdbc-1.0.0-all.jar).

**Schritt 4. Verwenden eines SSH-Tunnels zum Connect zu Amazon DocumentDB**  
Amazon DocumentDB-Cluster (mit MongoDB-Kompatibilität) werden in einer Amazon Virtual Private Cloud (Amazon VPC) bereitgestellt. Auf sie kann direkt von Amazon EC2 EC2-Instances oder anderen AWS Services zugegriffen werden, die in derselben Amazon VPC bereitgestellt werden. Darüber hinaus können EC2a Instances oder andere AWS Services VPCs in verschiedenen Regionen derselben AWS Region oder anderen Regionen über VPC-Peering auf Amazon DocumentDB zugreifen.  
Sie können SSH-Tunneling (auch bekannt als Portweiterleitung) verwenden, um von außerhalb der VPC des Clusters auf Ihre Amazon DocumentDB DocumentDB-Ressourcen zuzugreifen. Dies wird bei den meisten Benutzern der Fall sein, die ihre Anwendung nicht auf einer VM in derselben VPC wie der DocumentDB-Cluster ausführen.  
Um einen SSH-Tunnel zu erstellen, benötigen Sie eine Amazon EC2 EC2-Instance, die in derselben Amazon VPC wie Ihr Amazon DocumentDB-Cluster läuft. Sie können entweder eine vorhandene EC2-Instance in derselben VPC wie Ihr Cluster verwenden oder eine erstellen. Sie können einen SSH-Tunnel zum Amazon DocumentDB-Cluster einrichten, `sample-cluster.node.us-east-1.docdb.amazonaws.com` indem Sie den folgenden Befehl auf Ihrem lokalen Computer ausführen.  

```
ssh -i "ec2Access.pem" -L 27017:sample-cluster.node.us-east-1.docdb.amazonaws.com:27017 ubuntu@ec2-34-229-221-164.compute-1.amazonaws.com -N 
```
Das Flag -L wird für die Weiterleitung eines lokalen Ports verwendet. Dies ist eine Voraussetzung für die Verbindung zu einem BI-Tool, das auf einem Client außerhalb Ihrer VPC ausgeführt wird. Sobald Sie den obigen Schritt ausgeführt haben, können Sie mit den nächsten Schritten für das BI-Tool Ihrer Wahl fortfahren.   
Weitere Informationen zum SSH-Tunneling finden Sie in der Dokumentation zum Herstellen einer [Verbindung mit Amazon DocumentDB über einen SSH-Tunnel.](https://github.com/aws/amazon-documentdb-jdbc-driver/blob/develop/src/markdown/setup/setup.md#using-an-ssh-tunnel-to-connect-to-amazon-documentdb )

# Stellen Sie von Tableau Desktop aus eine Connect zu Amazon DocumentDB her
<a name="connect-jdbc-tableau"></a>

**Topics**
+ [

## Hinzufügen des Amazon DocumentDB DocumentDB-JDBC-Treibers
](#connect-jdbc-tableau-adddriver)
+ [

## Mit Tableau eine Verbindung zu Amazon DocumentDB herstellen — SSH-Tunnel
](#connect-jdbc-tableau-ssh)

## Hinzufügen des Amazon DocumentDB DocumentDB-JDBC-Treibers
<a name="connect-jdbc-tableau-adddriver"></a>

Um von Tableau Desktop aus eine Verbindung zu Amazon DocumentDB herzustellen, müssen Sie den Amazon DocumentDB DocumentDB-JDBC-Treiber und den DocumentDB-Tableau-Connector herunterladen und installieren.

1. Laden Sie die JAR-Datei des Amazon DocumentDB DocumentDB-JDBC-Treibers aus dem [Amazon DocumentDB DocumentDB-JDBC-Treiber-Repository](https://github.com/aws/amazon-documentdb-jdbc-driver/releases) herunter und kopieren Sie sie je nach Betriebssystem in eines der folgenden Verzeichnisse:
   + *Windows -* `C:\Program Files\Tableau\Drivers`
   + *macOS* - `~/Library/Tableau/Drivers`

1. Laden Sie den DocumentDB Tableau-Connector (eine TACO-Datei) von der [Tableau Exchange-Website](https://exchange.tableau.com/products/821) herunter und kopieren Sie ihn in Ihr *My Repository/Connectors Tableau-Verzeichnis*.
   + *Windows -* `C:\Users\[user]\Documents\My Tableau Repository\Connectors`
   + *macOS* - `/Users/[user]/Documents/My Tableau Repository/Connectors`

Weitere Informationen finden Sie in der [Tableau-Dokumentation](https://tableau.github.io/connector-plugin-sdk/docs/run-taco).

**Anmerkung**  
Wenn Sie neuere CA-Zertifikate verwenden, stellen Sie sicher, dass Sie Ihren JDBC-Treiber auf Version 1.4.5 aktualisieren (in diesem AWS [GitHub Repository](https://github.com/aws/amazon-documentdb-jdbc-driver/releases/tag/v1.4.5) verfügbar).

## Mit Tableau eine Verbindung zu Amazon DocumentDB herstellen — SSH-Tunnel
<a name="connect-jdbc-tableau-ssh"></a>

Um von einem Client-Computer außerhalb der VPC Ihres DocumentDB-Clusters aus eine Verbindung zu Tableau herzustellen, müssen Sie einen SSH-Tunnel einrichten, bevor Sie die folgenden Schritte ausführen:

1. Starten Sie die Tableau Desktop-Anwendung.

1. Navigieren Sie zu **Connect** > **Zu einem Server** > **Mehr**. 

1.  Wählen Sie unter **Installierte Konnektoren** die Option **Amazon DocumentDB by Amazon Web Services** aus.  
![\[Die Connect-Oberfläche auf Tableau Desktop zeigt das Untermenü Mehr... im Abschnitt Zu einem Server. Die Option Amazon DocumentDB ist im Untermenü Installed Connectors hervorgehoben.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/jdbc/tableau-choose-docdb.png)

**Herstellen einer Verbindung zu Amazon DocumentDB mithilfe von Tableau — Externer SSH-Tunnel**

1. **Geben Sie die erforderlichen Verbindungsparameter **Hostname**, **Port**, **Datenbank**, **Benutzername** und Passwort ein.** Die Verbindungsparameter im folgenden Beispiel entsprechen der JDBC-Verbindungszeichenfolge: 

   `jdbc:documentdb://localhost:27019/test? tls=true&tlsAllowInvalidHostnames=true&scanMethod=random&scanLimit=1000&loginTimeoutSec=0&readPreference=primary&retryReads=true&schemaName=_default`wobei die Parameter Benutzername und Passwort separat in einer Eigenschaftensammlung übergeben werden. Weitere Informationen zu Verbindungszeichenfolgenparametern finden Sie in der Github-Dokumentation des [Amazon DocumentDB DocumentDB-JDBC-Treibers](https://github.com/aws/amazon-documentdb-jdbc-driver/blob/develop/src/markdown/setup/connection-string.md).   
![\[Registerkarte „Allgemein“ in der Amazon DocumentDB DocumentDB-Konnektorschnittstelle mit Feldern für Hostname, Port, Datenbank, Benutzername und Passwort.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/jdbc/tableau-connect.png)

1. (Optional) Weitere erweiterte Optionen finden Sie auf der Registerkarte **Erweitert**.  
![\[Registerkarte „Erweitert“ in der Amazon DocumentDB DocumentDB-Konnektorschnittstelle mit zusätzlichen Verbindungsoptionen.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/jdbc/tableau-advanced.png)

1. Klicken Sie auf **Sign in**.

**Mit Tableau eine Verbindung zu Amazon DocumentDB herstellen — Interner SSH-Tunnel**
**Anmerkung**  
Wenn Sie es vorziehen, den SSH-Tunnel nicht über ein Terminal einzurichten, können Sie die Tableau-GUI verwenden, um Ihre EC2-Instanzdetails anzugeben, die der JDBC-Treiber standardmäßig zur Erstellung eines SSH-Tunnels verwenden wird. 

1. Wählen Sie auf der Registerkarte **Erweitert** die Option **SSH-Tunnel aktivieren** aus, um weitere Eigenschaften zu überprüfen.  
![\[Registerkarte „Erweitert“ in der Amazon DocumentDB DocumentDB-Connector-Schnittstelle, wobei „SSH-Tunnel aktivieren“ ausgewählt ist und zusätzliche SSH-Eingabefelder angezeigt werden.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/jdbc/tableau-advanced-Enablessh.png)

1. **Geben Sie den **SSH-Benutzer, den SSH-Hostnamen** **und die private SSH-Schlüsseldatei ein**.** 

1. (Optional) Sie können die Option **SSH Strict Host Key Check deaktivieren, wodurch die Überprüfung des Hostschlüssels** anhand einer Datei mit bekannten Hosts umgangen wird.
**Anmerkung**  
Die Deaktivierung dieser Option ist weniger sicher, da sie zu einem Angriff führen kann. [man-in-the-middle](https://en.wikipedia.org/wiki/Man-in-the-middle_attack)  
![\[Registerkarte „Erweitert“ in der Amazon DocumentDB DocumentDB-Konnektorschnittstelle mit deaktivierter Option „SSH Strict Host Key Check“.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/jdbc/tableau-advanced-sshhostkeycheck.png)

1. **Geben Sie die erforderlichen Parameter ein: **Hostname**, **Port**, **Datenbank**, **Benutzername und Passwort**.**
**Anmerkung**  
Stellen Sie sicher, dass Sie den DocumentDB-Clusterendpunkt und nicht localhost verwenden, wenn Sie die interne SSH-Tunneloption verwenden.  
![\[Registerkarte „Allgemein“ in der Amazon DocumentDB DocumentDB-Konnektorschnittstelle mit Feldern für Hostname, Port, Datenbank, Benutzername und Passwort.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/jdbc/tableau-hostname.png)

1. Klicken Sie auf **Sign In**.

# Connect zu Amazon DocumentDB her von DbVisualizer
<a name="connect-jdbc-DbVisualizer"></a>

**Topics**
+ [

## Hinzufügen des Amazon DocumentDB DocumentDB-JDBC-Treibers
](#connect-jdbc-DbVisualizer-adddriver)
+ [

## Verbindung zu Amazon DocumentDB herstellen mit DbVisualizer
](#connect-jdbc-DbVisualizer-connect)

## Hinzufügen des Amazon DocumentDB DocumentDB-JDBC-Treibers
<a name="connect-jdbc-DbVisualizer-adddriver"></a>

Um eine Verbindung zu Amazon DocumentDB herzustellen, müssen DbVisualizer Sie zuerst den Amazon DocumentDB DocumentDB-JDBC-Treiber importieren.

1. Starten Sie die DbVisualizer Anwendung und navigieren Sie zum Menüpfad: **Tools** > Driver Manager...

1. Wählen Sie **\$1** (oder wählen Sie im Menü **Treiber > Treiber erstellen**).

1. Legen Sie **Name** auf `DocumentDB` fest.

1. Stellen Sie das **URL-Format ein** auf `jdbc:documentdb://<host>[:port]/<database>[?option=value[&option=value[...]]]`

1. **Wählen Sie die **Ordnerschaltfläche** und dann die JAR-Datei des Amazon DocumentDB DocumentDB-JDBC-Treibers aus und klicken Sie auf die Schaltfläche Öffnen.**

1. Stellen Sie sicher, dass das Feld **Treiberklasse** auf eingestellt ist. `software.amazon.documentdb.jdbc.DocumentDbDriver` Ihre Driver Manager-Einstellungen für **DocumentDB** sollten wie im folgenden Beispiel aussehen.  
![\[Die Treibereinstellungen-Schnittstelle enthält den DbVisualizer eingegebenen Amazon DocumentDB DocumentDB-Namen, das URL-Format und die Treiberklassenkonfigurationen.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/jdbc/DbVisualizer-adddriver.jpg)

1. Schließen Sie das Dialogfeld. Der Amazon DocumentDB DocumentDB-JDBC-Treiber wird eingerichtet und ist einsatzbereit.

## Verbindung zu Amazon DocumentDB herstellen mit DbVisualizer
<a name="connect-jdbc-DbVisualizer-connect"></a>

Stellen Sie mithilfe von Amazon DocumentDB eine Connect DbVisualizer

1. Wenn Sie von außerhalb der VPC des Amazon DocumentDB-Clusters eine Verbindung herstellen, stellen Sie sicher, dass Sie einen SSH-Tunnel eingerichtet haben.

1. Wählen Sie im Menü der obersten **Ebene Datenbank > Datenbankverbindung erstellen**.

1. Geben Sie einen aussagekräftigen Namen für das Feld „**Name**“ ein.

1. Stellen Sie **Driver (JDBC)** auf den DocumentDB-Treiber ein, den Sie im vorherigen Abschnitt erstellt haben.

1. Stellen Sie die **Datenbank-URL** auf Ihre JDBC-Verbindungszeichenfolge ein. 

   Beispiel: `jdbc:documentdb://localhost:27017/database?tlsAllowInvalidHostnames=true`

1. Setzen Sie **Database Userid** auf Ihre Amazon DocumentDB DocumentDB-Benutzer-ID.

1. Stellen Sie **das Datenbankpasswort** auf das entsprechende Passwort für die Benutzer-ID ein.

   Ihr Datenbankverbindungsdialog sollte wie der folgende Dialog aussehen:  
![\[Datenbankverbindungsschnittstelle mit DocumentDB-Einstellungen.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/jdbc/DbVisualizer-connect.jpg)

1. Wählen Sie **Connect** aus.

# Automatische JDBC-Schemagenerierung
<a name="connect-jdbc-autoschemagen"></a>

Amazon DocumentDB ist eine Dokumentendatenbank und hat daher nicht das Konzept von Tabellen und Schemas. BI-Tools wie Tableau erwarten jedoch, dass die Datenbank, mit der sie eine Verbindung herstellen, ein Schema darstellt. Insbesondere wenn die JDBC-Treiberverbindung das Schema für die Sammlung in der Datenbank abrufen muss, fragt sie nach allen Sammlungen in der Datenbank ab. Der Treiber ermittelt, ob bereits eine zwischengespeicherte Version des Schemas für diese Sammlung vorhanden ist. Wenn keine zwischengespeicherte Version vorhanden ist, wird anhand der Sammlung nach Dokumenten gesucht und ein Schema erstellt, das auf dem folgenden Verhalten basiert. 

**Topics**
+ [

## Einschränkungen bei der Schemagenerierung
](#connect-jdbc-autoschemagen-limits)
+ [

## Optionen für die Scanmethode
](#connect-jdbc-autoschemagen-scanningoptions)
+ [

## Amazon-DocumentDB-Datentypen
](#connect-jdbc-autoschemagen-datatypes)
+ [

## Zuordnung skalarer Dokumentfelder
](#connect-jdbc-autoschemagen-scalarfields)
+ [

## Behandlung von Objekt- und Array-Datentypen
](#connect-jdbc-autoschemagen-objectandarray)

## Einschränkungen bei der Schemagenerierung
<a name="connect-jdbc-autoschemagen-limits"></a>

Der DocumentDB-JDBC-Treiber begrenzt die Länge von Bezeichnern auf 128 Zeichen. Der Schema-Generator kann die Länge der generierten Bezeichner (Tabellennamen und Spaltennamen) kürzen, um sicherzustellen, dass sie dieser Grenze entsprechen. 

## Optionen für die Scanmethode
<a name="connect-jdbc-autoschemagen-scanningoptions"></a>

Das Sampling-Verhalten kann mithilfe von Verbindungszeichenfolgen- oder Datenquellenoptionen geändert werden.
+ *ScanMethod=* <option>
  + *random — (Standard) — Die Beispieldokumente werden in zufälliger Reihenfolge zurückgegeben.*
  + *idForward* — Die Beispieldokumente werden in der Reihenfolge ihrer ID zurückgegeben.
  + *idReverse* — Die Beispieldokumente werden in umgekehrter Reihenfolge der ID zurückgegeben.
  + *all — Alle* Dokumente in der Sammlung werden als Stichprobe ausgewählt.
+ *scanLimit=* <n>— Die Anzahl der Dokumente, die gesampelt werden sollen. Der Wert muss eine positive ganze Zahl sein. *Der Standardwert ist 1000.* Wenn *ScanMethod* auf *all* gesetzt ist, wird diese Option ignoriert.

## Amazon-DocumentDB-Datentypen
<a name="connect-jdbc-autoschemagen-datatypes"></a>

Der Amazon DocumentDB-Server unterstützt eine Reihe von MongoDB-Datentypen. Im Folgenden sind die unterstützten Datentypen und die zugehörigen JDBC-Datentypen aufgeführt.


| MongoDB-Datentyp | Wird in DocumentDB unterstützt | JDBC-Datentyp | 
| --- | --- | --- | 
| Binäre Daten | Ja | VARBINARY | 
| Boolesch | Ja | BOOLEAN | 
| Double | Ja | DOUBLE | 
| 32-Bit-Ganzzahl | Ja | INTEGER | 
| 64-Bit-Ganzzahl | Ja | BIGINT | 
| Zeichenfolge | Ja | VARCHAR | 
| ObjectId | Ja | VARCHAR | 
| Date | Ja | TIMESTAMP (ZEITSTEMPEL) | 
| Null | Ja | VARCHAR | 
| Regulärer Ausdruck | Ja | VARCHAR | 
| Zeitstempel | Ja | VARCHAR | 
| MinKey | Ja | VARCHAR | 
| MaxKey | Ja | VARCHAR | 
| Objekt | Ja | virtuelle Tabelle | 
| Array | Ja | virtueller Tisch | 
| Decimal128 | Nein | DECIMAL | 
| JavaScript | Nein | VARCHAR | 
| JavaScript (mit Umfang) | Nein | VARCHAR | 
| Undefined | Nein | VARCHAR | 
| Symbol | Nein | VARCHAR | 
| DBPointer (4.0\$1) | Nein | VARCHAR | 

## Zuordnung skalarer Dokumentfelder
<a name="connect-jdbc-autoschemagen-scalarfields"></a>

Beim Scannen einer Stichprobe von Dokumenten aus einer Sammlung erstellt der JDBC-Treiber ein oder mehrere Schemas, um die Beispiele in der Sammlung darzustellen. Im Allgemeinen wird ein Skalarfeld im Dokument einer Spalte im Tabellenschema zugeordnet. In einer Sammlung mit dem Namen Team und einem einzelnen Dokument würde dies `{ "_id" : "112233", "name" : "Alastair", "age": 25 }` beispielsweise dem Schema entsprechen:


| Tabellenname | Spaltenname | Datentyp | Key (Schlüssel) | 
| --- | --- | --- | --- | 
| Team | Team-ID | VARCHAR | PK | 
| Team | Name | VARCHAR |  | 
| Team | age | INTEGER |  | 

### Förderung von Datentypkonflikten
<a name="connect-jdbc-autoschemagen-conflictpromo"></a>

Beim Scannen der Musterdokumente ist es möglich, dass die Datentypen für ein Feld von Dokument zu Dokument nicht einheitlich sind. In diesem Fall stuft der JDBC-Treiber den JDBC-Datentyp auf einen gemeinsamen Datentyp herauf, der für alle Datentypen aus den Stichprobendokumenten geeignet ist. 

Zum Beispiel:

```
{
"_id" : "112233",
"name" : "Alastair", "age" : 25
}

{
"_id" : "112244",
"name" : "Benjamin",
"age" : "32"
}
```

Das *Altersfeld* ist im ersten Dokument vom Typ 32-Bit-Ganzzahl, im zweiten Dokument vom Typ Zeichenfolge. In diesem Fall wird der JDBC-Treiber den JDBC-Datentyp auf VARCHAR heraufstufen, um einen der beiden Datentypen zu verarbeiten, wenn er angetroffen wird.


| Tabellenname | Spaltenname | Datentyp | Key (Schlüssel) | 
| --- | --- | --- | --- | 
| Team | Team-ID | VARCHAR | PK | 
| Team | Name | VARCHAR |  | 
| Team | age | VARCHAR |  | 

### Förderung skalar-skalarer Konflikte
<a name="connect-jdbc-autoschemagen-scalarconflictpromo"></a>

Das folgende Diagramm zeigt, wie Konflikte zwischen skalaren und skalaren Datentypen gelöst werden.

![\[Ein Hierarchiediagramm zeigt, wie widersprüchliche Datentypen heraufgestuft werden, wenn sie in Dokumenten nicht konsistent sind.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/jdbc/scalar-scalar-promotion.png)


### Förderung von Konflikten vom Typ skalarkomplex
<a name="connect-jdbc-autoschemagen-scalar-complex"></a>

Wie bei Skalar-Skalar-Typkonflikten kann dasselbe Feld in verschiedenen Dokumenten widersprüchliche Datentypen zwischen komplexen (Array und Objekt) und skalaren Datentypen (Integer, Boolean usw.) aufweisen. All diese Konflikte werden für diese Felder in VARCHAR aufgelöst (heraufgestuft). In diesem Fall werden Array- und Objektdaten als JSON-Darstellung zurückgegeben.

Beispiel für einen Konflikt zwischen eingebettetem Array und Zeichenkettenfeld:

```
{
   "_id":"112233",
   "name":"George Jackson",
   "subscriptions":[
      "Vogue",
      "People",
      "USA Today"
   ]
}
{
   "_id":"112244",
   "name":"Joan Starr",
   "subscriptions":1
}
```

Das obige Beispiel entspricht dem Schema für die Tabelle customer2: 


| Tabellenname | Spaltenname | Datentyp | Key (Schlüssel) | 
| --- | --- | --- | --- | 
| Kunde2 | Kunde2-ID | VARCHAR | PK | 
| Kunde2 | Name | VARCHAR |  | 
| Kunde2 | Abonnement | VARCHAR |  | 

und die virtuelle Tabelle customer1\$1subscriptions:


| Tabellenname | Spaltenname | Datentyp | Key (Schlüssel) | 
| --- | --- | --- | --- | 
| customer1\$1subscriptions | Kunde1-ID | VARCHAR | PK/FK | 
| customer1\$1abonnements | subscriptions\$1index\$1lvl0 | BIGINT | PK | 
| customer1\$1abonnements | value | VARCHAR |  | 
| customer\$1address | city | VARCHAR |  | 
| customer\$1address | Region | VARCHAR |  | 
| customer\$1address | country | VARCHAR |  | 
| customer\$1address | Code | VARCHAR |  | 

## Behandlung von Objekt- und Array-Datentypen
<a name="connect-jdbc-autoschemagen-objectandarray"></a>

Bisher haben wir nur beschrieben, wie skalare Datentypen zugeordnet werden. Objekt- und Array-Datentypen werden (derzeit) virtuellen Tabellen zugeordnet. Der JDBC-Treiber erstellt eine virtuelle Tabelle, die entweder Objekt- oder Array-Felder in einem Dokument darstellt. Der Name der zugewiesenen virtuellen Tabelle verkettet den Namen der ursprünglichen Sammlung, gefolgt vom Feldnamen, getrennt durch einen Unterstrich („\$1“).

Der Primärschlüssel der Basistabelle („\$1id“) nimmt in der neuen virtuellen Tabelle einen neuen Namen an und wird als Fremdschlüssel für die zugehörige Basistabelle bereitgestellt.

Für Felder vom Typ eingebettetes Array werden Indexspalten generiert, um den Index im Array auf jeder Ebene des Arrays darzustellen.

### Beispiel für ein eingebettetes Objektfeld
<a name="connect-jdbc-autoschemagen-embededobj"></a>

Für Objektfelder in einem Dokument wird vom JDBC-Treiber eine Zuordnung zu einer virtuellen Tabelle erstellt.

```
{
   "Collection: customer",
   "_id":"112233",
   "name":"George Jackson",
   "address":{
      "address1":"123 Avenue Way",
      "address2":"Apt. 5",
      "city":"Hollywood",
      "region":"California",
      "country":"USA",
      "code":"90210"
   }
}
```

Das obige Beispiel ist dem Schema für die Kundentabelle zugeordnet: 


| Tabellenname | Spaltenname | Datentyp | Key (Schlüssel) | 
| --- | --- | --- | --- | 
| customer | Kunden-ID | VARCHAR | PK | 
| customer | Name | VARCHAR |  | 

und die virtuelle Tabelle customer\$1address:


| Tabellenname | Spaltenname | Datentyp | Key (Schlüssel) | 
| --- | --- | --- | --- | 
| customer\$1address | Kunden-ID | VARCHAR | PK/FK | 
| customer\$1address | Adresse 1 | VARCHAR |  | 
| customer\$1address | Adresse2 | VARCHAR |  | 
| customer\$1address | city | VARCHAR |  | 
| customer\$1address | Region | VARCHAR |  | 
| customer\$1address | country | VARCHAR |  | 
| customer\$1address | Code | VARCHAR |  | 

### Beispiel für ein eingebettetes Array-Feld
<a name="connect-jdbc-autoschemagen-embedarray"></a>

Für Array-Felder in einem Dokument wird vom JDBC-Treiber auch eine Zuordnung zu einer virtuellen Tabelle erstellt.

```
{
   "Collection: customer1",
   "_id":"112233",
   "name":"George Jackson",
   "subscriptions":[
      "Vogue",
      "People",
      "USA Today"
   ]
}
```

Das obige Beispiel ist dem Schema für die Tabelle customer1 zugeordnet: 


| Tabellenname | Spaltenname | Datentyp | Key (Schlüssel) | 
| --- | --- | --- | --- | 
| Kunde1 | Kunde1-ID | VARCHAR | PK | 
| Kunde1 | Name | VARCHAR |  | 

und die virtuelle Tabelle customer1\$1subscriptions:


| Tabellenname | Spaltenname | Datentyp | Key (Schlüssel) | 
| --- | --- | --- | --- | 
| customer1\$1subscriptions | Kunde1-ID | VARCHAR | PK/FK | 
| customer1\$1abonnements | subscriptions\$1index\$1lvl0 | BIGINT | PK | 
| customer1\$1abonnements | value | VARCHAR |  | 
| customer\$1address | city | VARCHAR |  | 
| customer\$1address | Region | VARCHAR |  | 
| customer\$1address | country | VARCHAR |  | 
| customer\$1address | Code | VARCHAR |  | 

# SQL-Unterstützung und Einschränkungen
<a name="connect-jdbc-sqlandlimits"></a>

Der Amazon DocumentDB JDBC-Treiber ist ein schreibgeschützter Treiber, der eine Teilmenge von SQL-92 und einige gängige Erweiterungen unterstützt. [Weitere Informationen finden Sie in der Dokumentation zu den [SQL-Einschränkungen und in der Dokumentation zu den JDBC-Einschränkungen](https://github.com/aws/amazon-documentdb-jdbc-driver/blob/develop/src/markdown/sql/sql-limitations.md).](https://github.com/aws/amazon-documentdb-jdbc-driver/blob/develop/src/markdown/jdbc/jdbc-limitations.md) 

# Fehlerbehebung
<a name="connect-jdbc-troubleshooting"></a>

[Wenn Sie Probleme mit der Verwendung des Amazon DocumentDB DocumentDB-JDBC-Treibers haben, finden Sie weitere Informationen im Leitfaden zur Fehlerbehebung.](https://github.com/aws/amazon-documentdb-jdbc-driver/blob/develop/src/markdown/support/troubleshooting-guide.md) 

# Stellen Sie mithilfe des Amazon DocumentDB DocumentDB-ODBC-Treibers eine Verbindung her
<a name="connect-odbc"></a>

Der ODBC-Treiber für Amazon DocumentDB bietet Entwicklern eine relationale SQL-Schnittstelle und ermöglicht die Konnektivität von BI-Tools wie Power BI Desktop und Microsoft Excel.

Weitere Informationen finden Sie in der [Amazon DocumentDB ODBC-Treiber-Dokumentation](https://github.com/aws/amazon-documentdb-jdbc-driver/blob/develop/src/markdown/index.md) unter. GitHub

**Topics**
+ [

## Erste Schritte
](#connect-odbc-get-started)
+ [

# Den Amazon DocumentDB ODBC-Treiber in Windows einrichten
](connect-odbc-setup-windows.md)
+ [

# Stellen Sie von Microsoft Excel aus eine Connect zu Amazon DocumentDB her
](connect-odbc-excel.md)
+ [

# Stellen Sie von Microsoft Power BI Desktop aus eine Connect zu Amazon DocumentDB her
](connect-odbc-power-bi.md)
+ [

# Automatische Schemagenerierung
](connect-odbc-schema.md)
+ [

# SQL-Unterstützung und Einschränkungen
](connect-odbc-sql-support.md)
+ [

# Fehlerbehebung
](connect-odbc-troubleshooting.md)

## Erste Schritte
<a name="connect-odbc-get-started"></a>

**Schritt 1. Amazon DocumentDB-Cluster erstellen**  
Wenn Sie noch keinen Amazon DocumentDB-Cluster haben, gibt es eine Reihe von Möglichkeiten, um loszulegen.  
Amazon DocumentDB ist ein Dienst, der nur für Virtual Private Cloud (VPC) verfügbar ist. Wenn Sie eine Verbindung von einem lokalen Computer außerhalb der VPC des Clusters herstellen, müssen Sie eine SSH-Verbindung zu einer EC2 Amazon-Instance herstellen. Starten Sie in diesem Fall Ihren Cluster mithilfe der Anweisungen unter [Connect with EC2](https://docs.aws.amazon.com/documentdb/latest/developerguide/connect-ec2.html). Weitere Informationen [zum SSH-Tunneling und wann Sie es möglicherweise benötigen, finden Sie unter Verwenden eines SSH-Tunnels zum Herstellen einer Connect zu Amazon DocumentDB](https://github.com/aws/amazon-documentdb-odbc-driver/blob/develop/src/markdown/setup/setup.md#using-an-ssh-tunnel-to-connect-to-amazon-documentdb).

**Schritt 2. JRE- oder JDK-Installation**  
Abhängig von Ihrer BI-Anwendung müssen Sie möglicherweise sicherstellen, dass eine 64-Bit-JRE- oder JDK-Installationsversion 8 oder höher auf Ihrem Computer installiert ist. [Sie können das Java SE Runtime Environment 8 hier herunterladen.](https://www.oracle.com/ca-en/java/technologies/downloads/#java8)

**Schritt 3. Laden Sie den Amazon DocumentDB ODBC-Treiber herunter**  
[Laden Sie den Amazon DocumentDB ODBC-Treiber hier herunter.](https://github.com/aws/amazon-documentdb-odbc-driver/releases) Wählen Sie das richtige Installationsprogramm aus (z. B. documentdb-odbc-1.0.0.msi). Folgen Sie der Installationsanleitung.

**Schritt 4. Verwenden eines SSH-Tunnels zum Connect zu Amazon DocumentDB**  
Amazon DocumentDB-Cluster werden in einer Amazon Virtual Private Cloud (Amazon VPC) bereitgestellt. Sie können direkt von EC2 Amazon-Instances oder anderen AWS Services abgerufen werden, die in derselben Amazon VPC bereitgestellt werden. Darüber hinaus kann Amazon DocumentDB von EC2 Amazon-Instances oder anderen AWS Services VPCs in verschiedenen Regionen derselben AWS Region oder anderen Regionen über VPC-Peering aufgerufen werden.  
Nehmen wir jedoch an, dass Ihr Anwendungsfall erfordert, dass Sie (oder Ihre Anwendung) von außerhalb der VPC des Clusters auf Ihre Amazon DocumentDB DocumentDB-Ressourcen zugreifen. Dies wird bei den meisten Benutzern der Fall sein, die ihre Anwendung nicht auf einer VM in derselben VPC wie der Amazon DocumentDB-Cluster ausführen. Wenn Sie eine Verbindung von außerhalb der VPC herstellen, können Sie SSH-Tunneling (auch als Portweiterleitung bezeichnet) verwenden, um auf Ihre Amazon DocumentDB DocumentDB-Ressourcen zuzugreifen.  
Um einen SSH-Tunnel zu erstellen, benötigen Sie eine EC2 Amazon-Instance, die in derselben Amazon VPC wie Ihr Amazon DocumentDB-Cluster läuft. Sie können entweder eine bestehende EC2 Instanz in derselben VPC wie Ihr Cluster verwenden oder eine erstellen. Sie können einen SSH-Tunnel zum Amazon DocumentDB-Cluster einrichten, `sample-cluster.node.us-east-1.docdb.amazonaws.com` indem Sie den folgenden Befehl auf Ihrem lokalen Computer ausführen:  

```
ssh -i "ec2Access.pem" -L 27017:sample-cluster.node.us-east-1.docdb.amazonaws.com:27017 ubuntu@ec2-34-229-221-164.compute-1.amazonaws.com -N
```
Das `-L`-Flag dient zur Weiterleitung eines lokalen Ports. Dies ist eine Voraussetzung für die Verbindung zu einem BI-Tool, das auf einem Client außerhalb Ihrer VPC ausgeführt wird. Sobald Sie den obigen Schritt ausgeführt haben, können Sie mit den nächsten Schritten für das BI-Tool Ihrer Wahl fortfahren.  
Weitere Informationen zum SSH-Tunneling finden Sie in der Dokumentation Using an [SSH-Tunnel to Connect to](https://github.com/aws/amazon-documentdb-odbc-driver/blob/develop/src/markdown/setup/setup.md#using-an-ssh-tunnel-to-connect-to-amazon-documentdb) Amazon DocumentDB.

# Den Amazon DocumentDB ODBC-Treiber in Windows einrichten
<a name="connect-odbc-setup-windows"></a>

Gehen Sie wie folgt vor, um den Amazon DocumentDB DocumentDB-ODBC-Treiber in Windows einzurichten:

1. Öffnen Sie die **Systemsteuerung** in Windows und suchen Sie nach ODBC (oder wählen Sie im Menü **Windows-Tools** > **ODBC-Datenquellen (32-Bit) oder **ODBC-Datenquellen** (64-Bit))**:  
![\[Benutzeroberfläche der Windows-Systemsteuerung mit Setup-Links für ODBC-32-Bit- und 64-Bit-Datenquellen.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/odbc-control-panel-1.png)

1. Wählen Sie den entsprechenden ODBC-Treiber-Datenquellenadministrator aus: Wählen Sie die 32-Bit-Version, falls diese installiert ist, andernfalls wählen Sie die 64-Bit-Version.

1. **Wählen Sie die Registerkarte System-DSN und klicken Sie dann auf Hinzufügen...** um einen neuen DSN hinzuzufügen:  
![\[Die Administratoroberfläche für ODBC-Datenquellen zeigt die Schaltfläche Hinzufügen an.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/odbc-add-dsn-1.png)

1. Wählen Sie **Amazon DocumentDB** aus der Liste der Datenquellentreiber aus:  
![\[Die Schnittstelle „Neue Datenquelle erstellen“ mit der ausgewählten Amazon DocumentDB-Treiberoption.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/create-data-source-1.png)

1. **Füllen **Sie im Dialogfeld Amazon DocumentDB DSN konfigurieren** die Felder **Verbindungseinstellungen**, Registerkarte **TLS** und **Verbindung testen** aus und klicken Sie dann auf Speichern:**  
![\[Die Amazon DocumentDB DSN-Schnittstelle konfigurieren mit den Feldern Verbindungseinstellungen, TLS und Verbindung testen. Die Schaltfläche Speichern befindet sich unten.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/config-docdb-dsn-1.png)

1. Stellen Sie sicher, dass Sie das Windows-Formular korrekt ausfüllen, da die Verbindungsdetails je nach der von Ihnen gewählten SSH-Tunneling-Methode zur Instanz unterschiedlich sein können. EC2 [Informationen zu SSH-Tunneling-Methoden finden Sie hier.](https://github.com/aws/amazon-documentdb-odbc-driver/blob/develop/src/markdown/setup/setup.md#using-an-ssh-tunnel-to-connect-to-amazon-documentdb) Weitere Informationen zu den einzelnen Eigenschaften finden Sie unter [Syntax und Optionen für Verbindungszeichenfolgen](https://github.com/aws/amazon-documentdb-odbc-driver/blob/develop/src/markdown/setup/connection-string.md).  
![\[Die Felder Amazon DocumentDB DSN-Schnittstelle mit SSH-Tunnel konfigurieren sind abgeschlossen.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/config-docdb-dsn-ssh-1.png)

[Weitere Informationen zur Konfiguration des Amazon DocumentDB DocumentDB-ODBC-Treibers unter Windows finden Sie hier.](https://github.com/aws/amazon-documentdb-odbc-driver/blob/develop/src/markdown/setup/windows-dsn-configuration.md)

# Stellen Sie von Microsoft Excel aus eine Connect zu Amazon DocumentDB her
<a name="connect-odbc-excel"></a>

1. Stellen Sie sicher, dass der Amazon DocumentDB-Treiber korrekt installiert und konfiguriert wurde. Weitere Informationen finden Sie unter [Einrichten des ODBC-Treibers in Windows](https://docs.aws.amazon.com/documentdb/latest/developerguide/connect-odbc-setup-windows.html).

1. Starten Sie Microsoft Excel.

1. Navigieren Sie zu **Daten** > **Daten abrufen** > **Aus anderen Quellen**.

1. Wählen Sie „**Aus ODBC**“:  
![\[In der Dropdownliste Daten abrufen wird das Untermenü Aus anderen Quellen angezeigt. Die Option Aus ODBC ist ausgewählt.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/excel-odbc-1.png)

1. Wählen Sie im Dropdownmenü **Datenquellenname (DSN) die Datenquelle** aus, die Amazon DocumentDB zugeordnet ist:  
![\[Die Dropdownliste mit dem Namen der Datenquelle, in der die Option DocumentDB DSN ausgewählt ist.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/excel-odbc-dsn-select-1.png)

1. Wählen Sie die Sammlung aus, aus der Sie Daten in Excel laden möchten:  
![\[Die Navigator-Oberfläche mit der ausgewählten Gehaltstabelle und einer Vorschau der zugehörigen Daten.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/excel-odbc-collect-1.png)

1. Daten in Excel laden:  
![\[Excel-Tabelle mit fünf Datenzeilen aus der ausgewählten Gehaltstabelle.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/excel-data-load-1.png)

# Stellen Sie von Microsoft Power BI Desktop aus eine Connect zu Amazon DocumentDB her
<a name="connect-odbc-power-bi"></a>

**Topics**
+ [

## Voraussetzungen
](#odbc-power-bi-prerequisites)
+ [

## Benutzerdefinierter Microsoft Power BI Desktop-Connector hinzufügen
](#odbc-adding-power-bi)
+ [

## Herstellen einer Verbindung mit dem benutzerdefinierten Amazon DocumentDB DocumentDB-Connector
](#odbc-connect-custom-connector)
+ [

## Konfiguration von Microsoft Power BI Gateway
](#odbc-power-bi-gw)

## Voraussetzungen
<a name="odbc-power-bi-prerequisites"></a>

Bevor Sie beginnen, stellen Sie sicher, dass der Amazon DocumentDB ODBC-Treiber korrekt installiert ist.

## Benutzerdefinierter Microsoft Power BI Desktop-Connector hinzufügen
<a name="odbc-adding-power-bi"></a>

Kopieren Sie die `AmazonDocumentDBConnector.mez` Datei in den `<User>\Documents\Power BI Desktop\Custom Connectors\` Ordner (oder in den Ordner, `<User>\OneDrive\Documents\Power BI Desktop\Custom Connectors` falls Sie ihn verwenden OneDrive). Dadurch kann Power BI auf den benutzerdefinierten Connector zugreifen. Den Connector für Power BI Desktop erhalten [Sie hier](https://github.com/aws/amazon-documentdb-odbc-driver/releases). Starten Sie Power BI Desktop neu, um sicherzustellen, dass der Connector geladen ist.

**Anmerkung**  
Der benutzerdefinierte Connector unterstützt nur Amazon DocumentDB DocumentDB-Benutzernamen und -Passwort für die Authentifizierung.

## Herstellen einer Verbindung mit dem benutzerdefinierten Amazon DocumentDB DocumentDB-Connector
<a name="odbc-connect-custom-connector"></a>

1. Wählen Sie Amazon DocumentDB (Beta) unter **Daten abrufen** aus und klicken Sie auf **Connect**. Wenn Sie wegen der Nutzung eines Drittanbieterdienstes eine Warnung erhalten, klicken Sie auf **Weiter**.  
![\[Die Option Datenschnittstelle mit Amazon DocumentDB (Beta) abrufen ist hervorgehoben.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/get-data-1.png)

1. Geben Sie alle erforderlichen Informationen ein, um eine Verbindung zu Ihrem Amazon DocumentDB-Cluster herzustellen, und klicken Sie dann auf **OK**:  
![\[Formular mit Eingabefeldern für Verbindungsdetails für einen Amazon DocumentDB-Cluster.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/docdb-form-1.png)
**Anmerkung**  
Abhängig von der Konfiguration des Datenquellennamens (DSN) Ihres ODBC-Treibers wird der Bildschirm mit den SSH-Verbindungsdetails möglicherweise nicht angezeigt, wenn Sie die erforderlichen Informationen bereits in den DSN-Einstellungen angegeben haben.

1. Wählen Sie den Datenverbindungsmodus:
   + **Import** - lädt alle Daten und speichert die Informationen auf der Festplatte. Die Daten müssen aktualisiert und neu geladen werden, damit Datenaktualisierungen angezeigt werden.
   + **Direkte Abfrage** — lädt keine Daten, sondern führt Live-Abfragen der Daten durch. Das bedeutet, dass Daten nicht aktualisiert und neu geladen werden müssen, um Datenaktualisierungen anzuzeigen.  
![\[Schnittstelle mit Optionen für den Datenverbindungsmodus für DocumentDB.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/data-connectivity-1.png)
**Anmerkung**  
Wenn Sie eine sehr große Datenmenge verwenden, kann das Importieren aller Daten einen längeren Zeitraum in Anspruch nehmen.

1. Wenn Sie zum ersten Mal eine Verbindung zu dieser Datenquelle herstellen, wählen Sie den Authentifizierungstyp aus und geben Sie Ihre Anmeldeinformationen ein, wenn Sie dazu aufgefordert werden. Klicken Sie dann auf **Connect**:  
![\[Authentifizierungsschnittstelle mit Eingabefeldern für Benutzername und Passwort.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/docdb-credentials-1.png)

1. Wählen Sie im **Navigator-Dialogfeld** die gewünschten Datenbanktabellen aus und klicken Sie dann entweder auf **Laden**, um die Daten zu laden, oder auf **Daten transformieren**, um mit der Transformation der Daten fortzufahren.  
![\[Navigator-Oberfläche mit einer Liste von Datenbanktabellen, aus denen Sie wählen können. Die Schaltflächen „Daten laden“ und „Daten transformieren“ befinden sich unten rechts.\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/navigator-1.png)
**Anmerkung**  
Ihre Datenquelleneinstellungen werden gespeichert, sobald Sie eine Verbindung hergestellt haben. Um sie zu ändern, wählen Sie **Daten transformieren** > **Datenquelleneinstellungen**.

## Konfiguration von Microsoft Power BI Gateway
<a name="odbc-power-bi-gw"></a>

**Voraussetzungen:**
+ Stellen Sie sicher, dass der benutzerdefinierte Connector mit Power BI Gateway funktioniert.
+ Stellen Sie sicher, dass der ODBC-DSN in den ODBC-Datenquellen auf der Registerkarte **System** auf dem Computer erstellt wurde, auf dem Power BI Gateway installiert ist.

Wenn Sie die interne SSH-Tunnelfunktion verwenden, `known_hosts` muss sich die Datei dort befinden, wo das Power BI-Dienstkonto Zugriff darauf hat.

![\[Die Eigenschaftenschnittstelle known_hosts zeigt die Berechtigungen für den Dienst an. PBIEgw\]](http://docs.aws.amazon.com/de_de/documentdb/latest/developerguide/images/ssh-known-hosts-1.png)


**Anmerkung**  
Dies gilt auch für alle Dateien, die Sie möglicherweise benötigen, um eine Verbindung zu Ihrem Amazon DocumentDB-Cluster herstellen zu können, wie z. B. eine Zertifizierungsstelle (CA) -Zertifikatsdatei (PEM-Datei). 

# Automatische Schemagenerierung
<a name="connect-odbc-schema"></a>

Der ODBC-Treiber verwendet den Amazon DocumentDB DocumentDB-JDBC-Treiber über JNI (Java Native Interface), sodass die automatische Schemagenerierung im JDBC-Treiber ähnlich funktioniert. [Weitere Informationen zur automatischen Schemagenerierung finden Sie unter Automatische JDBC-Schemagenerierung.](https://docs.aws.amazon.com/documentdb/latest/developerguide/connect-jdbc-autoschemagen.html) [Wenn Sie außerdem mehr über die ODBC-Treiberarchitektur erfahren möchten, klicken Sie hier.](https://github.com/aws/amazon-documentdb-odbc-driver/blob/develop/src/markdown/index.md)

# SQL-Unterstützung und Einschränkungen
<a name="connect-odbc-sql-support"></a>

Der Amazon DocumentDB ODBC-Treiber ist ein schreibgeschützter Treiber, der eine Teilmenge von SQL-92 und einige gängige Erweiterungen unterstützt. Weitere Informationen finden Sie in der Dokumentation zu [ODBC-Support](https://github.com/aws/amazon-documentdb-odbc-driver/blob/develop/src/markdown/support/odbc-support-and-limitations.md) und Einschränkungen.

# Fehlerbehebung
<a name="connect-odbc-troubleshooting"></a>

Wenn Sie Probleme mit der Verwendung des Amazon DocumentDB DocumentDB-ODBC-Treibers haben, finden Sie weitere Informationen im Leitfaden zur [Fehlerbehebung](https://github.com/aws/amazon-documentdb-odbc-driver/blob/develop/src/markdown/support/troubleshooting-guide.md).

# Programm mit Amazon DocumentDB
<a name="program-docdb"></a>

Der Dienst unterstützt die JSON-Schemavalidierung.

**Topics**
+ [DocumentDB Java-Programmierhandbuch](docdb-java-pg.md)
+ [

# Verwenden der JSON-Schemavalidierung
](json-schema-validation.md)

# Amazon DocumentDB Java-Programmierhandbuch
<a name="docdb-java-pg"></a>

Dieses umfassende Handbuch bietet eine detaillierte Anleitung zur Arbeit mit Amazon DocumentDB unter Verwendung der Java-Treiber von MongoDB und behandelt wichtige Aspekte des Datenbankbetriebs und der Datenbankverwaltung.

**Topics**
+ [

## Einführung
](#java-pg-intro)
+ [

## Voraussetzungen
](#java-pg-prereqs)
+ [Datenmodelle](#java-pg-data-models)
+ [Verbindung mit einem Java-Treiber herstellen](java-pg-connect-mongo-driver.md)
+ [CRUD-Operationen mit Java](java-crud-operations.md)
+ [Indexverwaltung mit Java](index-management-java.md)
+ [Ereignisgesteuerte Programmierung](event-driven-programming.md)

## Einführung
<a name="java-pg-intro"></a>

Das Handbuch beginnt mit der Konnektivität und erklärt, wie sichere Verbindungen zu DocumentDB-Clustern mithilfe des MongoDB-Java-Treibers hergestellt werden. Es beschreibt die Komponenten der Verbindungszeichenfolge, die SSL/TLS Implementierung und die verschiedenen Verbindungsoptionen, einschließlich IAM-Authentifizierung und Verbindungspooling, sowie robuste Strategien zur Fehlerbehandlung.

Im Abschnitt CRUD-Operationen (Create, Read, Update, Delete) behandelt das Handbuch ausführlich die Bearbeitung von Dokumenten und zeigt, wie Dokumente sowohl mit Einzel- als auch mit Massenoperationen erstellt, gelesen, aktualisiert und gelöscht werden. Es erklärt die Verwendung von Filtern, Abfragen und verschiedenen Operationsoptionen und betont gleichzeitig bewährte Methoden für die Fehlerbehandlung und die Implementierung von Wiederholungslogik zur Erhöhung der Zuverlässigkeit. Der Leitfaden befasst sich auch ausführlich mit der Indexverwaltung und beschreibt detailliert die Erstellung und Verwaltung verschiedener Indextypen, darunter Einzelfeld-, zusammengesetzte Indizes, Sparse-Indizes und Textindizes. Es wird erklärt, wie die Abfrageleistung durch die richtige Indexauswahl und die Verwendung der `explain()` Funktion zur Analyse von Abfrageausführungsplänen optimiert werden kann.

Der letzte Abschnitt konzentriert sich auf ereignisgesteuertes Programmieren mithilfe der Change-Streams von Amazon DocumentDB und zeigt, wie die Überwachung von Datenänderungen in Echtzeit in Java-Anwendungen implementiert werden kann. Er behandelt die Implementierung von Change-Stream-Cursors, den Umgang mit Resume-Token für den kontinuierlichen Betrieb und zeitbasierte Operationen für die Verarbeitung historischer Daten. Der gesamte Leitfaden enthält praktische Codebeispiele und bewährte Methoden, was ihn zu einer unschätzbaren Ressource für Sie macht, wenn Sie robuste Java-Anwendungen mit Amazon DocumentDB erstellen möchten.

## Voraussetzungen
<a name="java-pg-prereqs"></a>

Stellen Sie vor dem Beginn sicher, dass Sie über das Folgende verfügen:
+ Ein AWS Konto mit einem konfigurierten DocumentDB-Cluster. Informationen zur Einrichtung eines DocumentDB-Clusters finden Sie in diesem [Blogbeitrag „Erste Schritte](https://aws.amazon.com/blogs/database/part-1-getting-started-with-amazon-documentdb-using-amazon-ec2/)“.
+ Java Development Kit (JDK) installiert (wir werden [Amazon Corretto 21](https://docs.aws.amazon.com/corretto/latest/corretto-21-ug/downloads-list.html) für dieses Handbuch verwenden).
+ Maven für das Abhängigkeitsmanagement.

## Datenmodelle für diesen Leitfaden
<a name="java-pg-data-models"></a>

Der gesamte Beispielcode in diesem Handbuch geht von einer Verbindung zu einer Testdatenbank „ProgGuideData“ aus, die eine Sammlung „Restaurants“ enthält. Alle Beispielcodes in diesem Handbuch funktionieren auf einem Restauranteintragssystem. Im Folgenden finden Sie ein Beispiel dafür, wie ein Dokument in diesem System aussieht:

```
{
    "_id": "ab6ad8f119b5bca3efa2c7ae",
    "restaurantId": "REST-CRT9BL",
    "name": "Thai Curry Palace",
    "description": "Amazing Restaurant, must visit",
    "cuisine": "Thai",
    "address": {
        "street": "914 Park Street",
        "city": "Bryan",
        "state": "AL",
        "zipCode": "96865",
        "location": {
            "type": "Point",
            "coordinates": [-25.4619, 8.389]
        }
    },
    "contact": {
        "phone": "(669) 915-9056 x6657"
    },
    "rating": {
        "average": 3.4,
        "totalReviews": 275
    },
    "priceRange": "$",
    "menu": [{
        "category": "Appetizers",
        "items": [{
            "name": "Buffalo Chicken Wings",
            "price": 13.42
        }]
    }],
    "features": [
        "Private Dining"
    ],
    "isActive": false“ michelin”: {“
        star”: 3,
        “ranking_years”: 4
    }
}
```

Alle Codebeispiele, die CRUD, Indexverwaltung und ereignisgesteuerte Programmierung zeigen, gehen davon aus, dass Sie über ein [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoClient.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoClient.html)Objekt`dbClient`, ein Objekt und ein [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoDatabase.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoDatabase.html)Objekt `connectionDB` verfügen. [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoCollection.html#find()](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoCollection.html#find())`collection`

**Anmerkung**  
Alle Codebeispiele in diesem Handbuch wurden mit der MongoDB-Java-Treiberversion 5.3.0 getestet.

# Mit einem MongoDB-Java-Treiber eine Verbindung zu Amazon DocumentDB herstellen
<a name="java-pg-connect-mongo-driver"></a>

Dieser Abschnitt enthält eine step-by-step Anleitung für die Verbindung mit Amazon DocumentDB mithilfe von Java-Treibern. Auf diese Weise können Sie mit der Integration von DocumentDB in Ihre Java-Anwendungen beginnen.

**Topics**
+ [

## Schritt 1: Einrichten des Projekts
](#step1-set-up)
+ [

## Schritt 2: Erstellen Sie die Verbindungszeichenfolge
](#step2-create-connection-string)
+ [

## Schritt 3: Schreiben Sie den Verbindungscode
](#step3-write-connect-code)
+ [

## Schritt 4: Verbindungsausnahmen behandeln
](#step4-handle-connect-exceptions)
+ [

## Schritt 5: Den Code ausführen
](#step5-running-code)
+ [

## Bewährte Methoden für Verbindungen
](#java-connect-best-practices)

## Schritt 1: Einrichten des Projekts
<a name="step1-set-up"></a>

1. Erstellen Sie mit Maven ein Java-Projekt:

   ```
   mvn archetype:generate -DgroupId=com.docdb.guide -DartifactId=my-docdb-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
   ```

1. Fügen Sie den MongoDB-Java-Treiber als Abhängigkeit für das Projekt in Ihrer Datei 'pom.xml' hinzu:

   ```
   <dependency>
       <groupId>org.mongodb</groupId>
       <artifactId>mongodb-driver-sync</artifactId> 
       <version>5.3.0</version> 
   </dependency>
   ```

## Schritt 2: Erstellen Sie die Verbindungszeichenfolge
<a name="step2-create-connection-string"></a>

Die Amazon DocumentDB DocumentDB-Verbindungszeichenfolge ist wichtig, um eine Verbindung zwischen Ihrer Anwendung und Ihrem DocumentDB-Cluster herzustellen. Diese Zeichenfolge enthält wichtige Informationen wie den Cluster-Endpunkt, den Port, Authentifizierungsdetails und verschiedene Verbindungsoptionen. Um eine DocumentDB-Verbindungszeichenfolge zu erstellen, beginnen Sie normalerweise mit dem Basisformat:

```
"mongodb://username:password@cluster-endpoint:port/?[connection options]"
```

Sie müssen „Benutzername“ und „Passwort“ durch Ihre tatsächlichen Anmeldeinformationen ersetzen. Den Endpunkt und die Portnummer Ihres Clusters finden Sie sowohl im AWS-Managementkonsole als auch über AWS CLI. Informationen [Die Endpunkte eines Clusters finden](db-cluster-endpoints-find.md) zum Finden des Cluster-Endpunkts für Ihren Cluster finden Sie unter. Der Standardport für DocumentDB ist 27017.

**Beispiele für Verbindungszeichenfolgen**
+ Herstellen einer Verbindung zu DocumentDB mithilfe von Verschlüsselung bei der Übertragung und Sicherstellung, dass Leseanforderungen an Read Replicas und Schreiben an Primary weitergeleitet werden:

  ```
  "mongodb://username:password@cluster-endpoint:27017/?tls=true& 
     tlsCAFile=global-bundle.pem& 
     readPreference=secondaryPreferred&
     retryWrites=false"
  ```
+ Herstellen einer Verbindung zu DocumentDB mithilfe der IAM-Authentifizierung:

  ```
  "mongodb://cluster-endpoint:27017/?tls=true& 
     tlsCAFile=global-bundle.pem& 
     readPreference=secondaryPreferred&
     retryWrites=false&
     authSource=%24external&
     authMechanism=MONGODB-AWS"
  ```

Die verschiedenen Optionen, die für die Verbindungszeichenfolge verfügbar sind, lauten wie folgt:
+ [TLS-Zertifikat](#connection-string-tls)
+ [Aus gelesenen Replikaten lesen](#connection-string-read-rep)
+ [Schreiben Sie ein Anliegen und führen Sie ein Tagebuch](#connection-string-write-journal)
+ [RetryWrites](#connection-string-retry-writes)
+ [IAM-Authentifizierung](#connection-string-iam-auth)
+ [Verbindungspool](#connection-string-pool)
+ [Parameter für das Verbindungs-Timeout](#connection-string-timeout)

### TLS-Zertifikat
<a name="connection-string-tls"></a>

**`tls=true|false`**— Diese Option aktiviert oder deaktiviert Transport Layer Security (TLS). Standardmäßig ist die Verschlüsselung bei der Übertragung auf dem Amazon DocumentDB-Cluster aktiviert. Daher sollte der Wert für diese Option lauten, sofern TLS nicht auf Cluster-Ebene deaktiviert ist. `true`

Bei Verwendung von TLS muss der Code ein SSL-Zertifikat bereitstellen, wenn eine Verbindung zu einem DocumentDB-Cluster hergestellt wird. Laden Sie das Zertifikat herunter, das für die sichere Verbindung zum Cluster erforderlich ist: [https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem](https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem). Es gibt zwei Möglichkeiten, die `global-bundle.pem` Datei zu verwenden.
+ **Option 1** — Extrahieren Sie alle Zertifikate aus der `global-bundle.pem` Datei und speichern Sie sie mit dem Keytool von Java in einer `.jks` Datei, die später im Code verwendet werden kann. Das Skript, das zeigt, wie [Verbindung bei aktiviertem TLS herstellen](connect_programmatically.md#connect_programmatically-tls_enabled) das geht, finden Sie auf der Registerkarte Java.
+ **Option 2** — Fügen Sie die `global-bundle.pem` Datei dynamisch zum Code hinzu, erstellen Sie einen Keystore im Arbeitsspeicher und verwenden Sie ihn`SSLContext`, um das Zertifikat beim Herstellen der Verbindung bereitzustellen.

### Aus gelesenen Replikaten lesen
<a name="connection-string-read-rep"></a>

**`replicaSet=rs0&readPreference=secondaryPreferred`**— Wenn Sie diese beiden Optionen angeben, werden alle Leseanforderungen an die Read Replicas und Schreibanforderungen an die primäre Instanz weitergeleitet. Durch die Verwendung `replicaSet=rs0` in der Verbindungszeichenfolge kann der MongoDB-Treiber eine automatisch aktualisierte Ansicht der Cluster-Topologie beibehalten, sodass Anwendungen die Sichtbarkeit der aktuellen Knotenkonfigurationen beibehalten können, wenn Instanzen hinzugefügt oder entfernt werden. Wenn Sie diese Optionen nicht angeben oder angeben, werden alle Lese- und Schreibvorgänge an die primäre Instanz `readPreference=primary` gesendet. Weitere Optionen für finden `readPreference` Sie unter[Lesen Sie die Einstellungsoptionen](how-it-works.md#durability-consistency-isolation).

### Schreiben Sie ein Anliegen und führen Sie ein Tagebuch
<a name="connection-string-write-journal"></a>

Das Problem mit Schreibvorgängen bestimmt den Grad der Bestätigung, die von der Datenbank für Schreibvorgänge angefordert wird. MongoDB-Treiber bieten eine Option zur Optimierung von Schreib-, Bedenken- und Journaldateien. Amazon DocumentDB erwartet nicht, dass Sie Write Concern und Journal festlegen, und ignoriert die Werte, die für `w` und `j` (`writeConcern`und`journal`) gesendet werden. DocumentDB schreibt Daten immer mit`writeConcern`: `majority` und`journal`:, `true` sodass die Schreibvorgänge auf den meisten Knoten dauerhaft aufgezeichnet werden, bevor eine Bestätigung an den Client gesendet wird.

### RetryWrites
<a name="connection-string-retry-writes"></a>

**`retryWrites=false`**— DocumentDB unterstützt keine wiederholbaren Schreibvorgänge und daher sollte dieses Attribut immer auf gesetzt werden. `false`

### IAM-Authentifizierung
<a name="connection-string-iam-auth"></a>

**`authSource=%24external`und `authMechanism=MONGODB-AWS`** — Diese beiden Parameter werden zur Authentifizierung mit verwendet. AWS Identity and Access Management Die IAM-Authentifizierung ist derzeit nur in der instanzbasierten Cluster-Version 5.0 verfügbar. Weitere Informationen finden Sie unter [Authentifizierung mit IAM-Identität](iam-identity-auth.md).

### Verbindungspool
<a name="connection-string-pool"></a>

Diese Optionen sind für das Verbindungspooling verfügbar:
+ **`maxPoolSize`**— Legt die maximale Anzahl von Verbindungen fest, die im Pool erstellt werden können. Wenn alle Verbindungen verwendet werden und eine neue Anfrage eingeht, wartet es darauf, dass eine Verbindung verfügbar wird. Die Standardeinstellung für MongoDB-Java-Treiber ist 100.
+ **`minPoolSize`**— Gibt die Mindestanzahl von Verbindungen an, die jederzeit im Pool aufrechterhalten werden sollten. Die Standardeinstellung für MongoDB-Java-Treiber ist 0.
+ **`maxIdleTimeMS`**— Legt fest, wie lange eine Verbindung im Pool inaktiv bleiben kann, bevor sie geschlossen und entfernt wird. Die Standardeinstellung für MongoDB-Java-Treiber ist 100 Millisekunden.
+ **`waitQueueTimeoutMS`**— Konfiguriert, wie lange ein Thread warten soll, bis eine Verbindung verfügbar wird, wenn der Pool seine maximale Größe erreicht hat. Wenn innerhalb dieser Zeit keine Verbindung verfügbar ist, wird eine Ausnahme ausgelöst. Der Standardwert für MongoDB-Java-Treiber ist 120.000 Millisekunden (2 Minuten).

### Parameter für das Verbindungs-Timeout
<a name="connection-string-timeout"></a>

Timeout ist ein Mechanismus zur Begrenzung der Zeit, die ein Vorgang oder ein Verbindungsversuch dauern kann, bis er als fehlgeschlagen betrachtet wird. Die folgenden Timeout-Parameter sind verfügbar, um unbefristete Wartezeiten zu verhindern und die Ressourcenzuweisung zu verwalten:
+ **`connectTimeoutMS`**— Konfiguriert, wie lange der Treiber wartet, um eine Verbindung zum Cluster herzustellen. Die Standardeinstellung ist 10.000 Millisekunden (10 Sekunden).
+ **`socketTimeoutMS`**— Gibt an, wie lange der Treiber bei einem Nicht-Schreibvorgang auf eine Antwort vom Server wartet. Die Standardeinstellung ist 0 (kein Timeout oder unendlich).
+ **`serverSelectionTimeoutMS`**— Gibt an, wie lange der Treiber warten wird, um einen verfügbaren Server im Cluster zu finden. Der Standardwert für diese Einstellung ist 30 Sekunden und reicht aus, damit beim Failover eine neue primäre Instanz ausgewählt werden kann.

## Schritt 3: Schreiben Sie den Verbindungscode
<a name="step3-write-connect-code"></a>

Das folgende Codebeispiel zeigt, wie eine TLS-Verbindung zu Amazon DocumentDB hergestellt wird:
+ Es erstellt die Objekte Java [https://docs.oracle.com/javase/8/docs/api/java/security/KeyStore.html](https://docs.oracle.com/javase/8/docs/api/java/security/KeyStore.html)und [`SSLContext`>](https://docs.oracle.com/javase/8/docs/api/javax/net/ssl/SSLContext.html).
+ Es erstellt das [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/MongoClientSettings.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/MongoClientSettings.html)Objekt auch, indem es es an das [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/ConnectionString.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/ConnectionString.html)Objekt übergibt. Um eine TLS-Verbindung herzustellen, müssen Sie das `MongoClientSettings` Objekt verwenden, um das `connectionstring` und zu binden`sslcontext`.
+ Using [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoClients.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoClients.html)ruft ein [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoClient.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoClient.html)Objekt ab.

```
public static MongoClient makeDbConnection(String dbName, String DbUserName, String DbPassword,
    String DbClusterEndPoint, String keyStorePass) throws Exception {
    MongoClient connectedClient;
    String connectionOptions = "?replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false";
    String connectionUrl = "mongodb://" + DbUserName + ":" + DbPassword + "@" + DbClusterEndPoint + ":27017/" +
        dbName + connectionOptions;

    try {
        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        try (FileInputStream fis = new FileInputStream("src/main/resources/certs/truststore.jks")) {
            trustStore.load(fis, keyStorePass.toCharArray());
            TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            tmf.init(trustStore);

            SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
            sslContext.init(null, tmf.getTrustManagers(), new SecureRandom());
            ConnectionString connectionString = new ConnectionString(connectionUrl);
            MongoClientSettings settings = MongoClientSettings.builder()
                .applyConnectionString(connectionString)
                .applyToSslSettings(builder - > {
                    builder.enabled(true);
                    builder.context(sslContext);
                })
                .build();
            connectedClient = MongoClients.create(settings);
        }
        return connectedClient;
    } catch (MongoException e5) {
        throw new RuntimeException(e5);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
```

## Schritt 4: Verbindungsausnahmen behandeln
<a name="step4-handle-connect-exceptions"></a>

Bei der Arbeit mit DocumentDB in Java-Anwendungen ist die Behandlung von Verbindungsausnahmen entscheidend für die Aufrechterhaltung robuster und zuverlässiger Datenbankoperationen. Durch die richtige Verwaltung helfen diese Ausnahmen nicht nur bei der schnellen Diagnose von Problemen, sondern stellen auch sicher, dass Ihre Anwendung mit vorübergehenden Netzwerkunterbrechungen oder Serverausfällen problemlos umgehen kann, was zu einer verbesserten Stabilität und Benutzererfahrung führt. Zu den wichtigsten Ausnahmen im Zusammenhang mit dem Verbindungsaufbau gehören:
+ **`MongoException`**— Eine allgemeine Ausnahme, die für verschiedene Szenarien gelten könnte, die nicht durch speziellere Ausnahmen abgedeckt sind. Stellen Sie sicher, dass diese Ausnahme nach allen anderen spezifischen Ausnahmen behandelt wird, da es sich um eine catch MongoDB-Ausnahme handelt.
+ **`MongoTimeoutException`**— Wird ausgegeben, wenn bei einem Vorgang das Zeitlimit überschritten wird. Zum Beispiel die Abfrage eines nicht vorhandenen Cluster-Endpunkts.
+ **`MongoSocketException`**— Ausgestellt für Netzwerkprobleme. Zum Beispiel eine plötzliche Netzwerkunterbrechung während eines Vorgangs. 
+ **`MongoSecurityException`**— Wird ausgegeben, wenn die Authentifizierung fehlschlägt. Zum Beispiel, wenn eine Verbindung mit falschen Anmeldeinformationen hergestellt wird. 
+ **`MongoConfigurationException`**— Wird ausgegeben, wenn in der Client-Konfiguration ein Fehler auftritt. Zum Beispiel, wenn eine ungültige Verbindungszeichenfolge verwendet wird.

## Schritt 5: Den Code ausführen
<a name="step5-running-code"></a>

Das folgende Codebeispiel erstellt eine Amazon DocumentDB DocumentDB-Verbindung und druckt alle Datenbanken:

```
public static void TestConnection() {
    try (MongoClient mongoClient = makeDbConnection(DATABASE_NAME, DB_USER_NAME, DB_PASSWORD, DB_CLUSTER_ENDPOINT, KEYSTORE_PASSWORD)) {
        List < String > databases = mongoClient.listDatabaseNames().into(new ArrayList < > ());
        System.out.println("Databases: " + databases);
    } catch (MongoException e) {
        System.err.println("MongoDB error: " + e.getMessage());
        throw new RuntimeException(e);
    }
}
```

## Bewährte Methoden für Verbindungen
<a name="java-connect-best-practices"></a>

Die folgenden bewährten Methoden sollten Sie berücksichtigen, wenn Sie mit einem MongoDB-Java-Treiber eine Verbindung zu Amazon DocumentDB herstellen:
+ Schließen Sie Ihren immer [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoClient.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoClient.html)dann, wenn Sie den Client nicht mehr benötigen, um Ressourcen freizugeben.
+ Behandeln Sie Ausnahmen angemessen und implementieren Sie eine korrekte Fehlerprotokollierung.
+ Verwenden Sie Umgebungsvariablen oder speichern AWS Secrets Manager Sie vertrauliche Informationen wie Benutzernamen und Passwörter.

# Durchführen von CRUD-Vorgängen in Amazon DocumentDB mit Java
<a name="java-crud-operations"></a>

In diesem Abschnitt wird die Durchführung von CRUD-Vorgängen (Create, Read, Update, Delete) in Amazon DocumentDB mithilfe von MongoDB-Java-Treibern beschrieben.

**Topics**
+ [

## Dokumente in einer DocumentDB-Sammlung erstellen und einfügen
](#creating-inserting)
+ [

## Lesen und Abrufen von Daten aus einer DocumentDB-Sammlung
](#reading-retrieving)
+ [

## Aktualisieren vorhandener Dokumente in einer DocumentDB-Sammlung
](#updating-documents)
+ [

## Dokumente aus einer DocumentDB-Sammlung entfernen
](#deleting-documents)
+ [

## Fehlerbehandlung mit Wiederholungslogik
](#error-handling)

## Dokumente in einer DocumentDB-Sammlung erstellen und einfügen
<a name="creating-inserting"></a>

Durch das Einfügen von Dokumenten in Amazon DocumentDB können Sie Ihren Sammlungen neue Daten hinzufügen. Je nach Ihren Bedürfnissen und dem Datenvolumen, mit dem Sie arbeiten, gibt es mehrere Möglichkeiten, Einfügungen durchzuführen. Die einfachste Methode zum Einfügen eines einzelnen Dokuments in die Sammlung ist. `insertOne()` Um mehrere Dokumente gleichzeitig einzufügen, können Sie die `insertMany()` Methode verwenden, mit der Sie eine Reihe von Dokumenten in einem einzigen Vorgang hinzufügen können. Eine andere Methode zum Einfügen vieler Dokumente in eine DocumentDB-Sammlung ist. `bulkWrite()` In diesem Handbuch werden all diese Methoden zum Erstellen von Dokumenten in einer DocumentDB-Sammlung beschrieben.

**`insertOne()`**

Lassen Sie uns zunächst untersuchen, wie ein einzelnes Dokument in eine Amazon DocumentDBB-Sammlung eingefügt wird. Das Einfügen eines einzelnen Dokuments erfolgt mithilfe der Methode. `insertOne()` Diese Methode verwendet [BsonDocument](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/bson/org/bson/BsonDocument.html)für das Einfügen einen Wert und gibt ein [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/result/InsertOneResult.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/result/InsertOneResult.html)Objekt zurück, mit dem die Objekt-ID des neu eingefügten Dokuments abgerufen werden kann. Der folgende Beispielcode zeigt das Einfügen eines Restaurantdokuments in die Sammlung:

```
Document article = new Document()
    .append("restaurantId", "REST-21G145")
    .append("name", "Future-proofed Intelligent Bronze Hat")
    .append("cuisine", "International")
    .append("rating", new Document()
        .append("average", 1.8)
        .append("totalReviews", 267))
    .append("features", Arrays.asList("Outdoor Seating", "Live Music"));

try {
    InsertOneResult result = collection.insertOne(article);
    System.out.println("Inserted document with the following id: " + result.getInsertedId());
} catch (MongoWriteException e) {
    // Handle duplicate key or other write errors
    System.err.println("Failed to insert document: " + e.getMessage());
    throw e;
} catch (MongoException e) {
    // Handle other MongoDB errors
    System.err.println("MongoDB error: " + e.getMessage());
    throw e;
}
```

Achten Sie bei der Verwendung darauf`insertOne()`, eine angemessene Fehlerbehandlung einzubeziehen. Im obigen Code hat „`restaurantId`“ beispielsweise einen eindeutigen Index. Wenn Sie diesen Code erneut ausführen, wird Folgendes ausgelöst`MongoWriteException`:

```
Failed to insert document: Write operation error on server docdbCluster.docdb.amazonaws.com:27017. 
Write error: WriteError{code=11000, message='E11000 duplicate key error collection: Restaurants index: restaurantId_1', details={}}.
```

**insertMany ()**

Die wichtigsten Methoden zum Einfügen vieler Dokumente in eine Sammlung sind insertMany () und. `bulkWrite()` 

Die `insertMany()` Methode ist die einfachste Methode, mehrere Dokumente in einem einzigen Vorgang einzufügen. Sie akzeptiert eine Liste von Dokumenten und fügt sie in die Sammlung ein. Diese Methode ist ideal, wenn Sie einen Stapel neuer Dokumente einfügen, die unabhängig voneinander sind und keine speziellen Verarbeitungs- oder Mischoperationen erfordern. Der folgende Code zeigt, wie JSON-Dokumente aus einer Datei gelesen und in die Sammlung eingefügt werden. Die `insertMany()` Funktion gibt ein [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/result/InsertManyResult.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/result/InsertManyResult.html)`InsertManyResult`Objekt zurück, mit dem IDs alle eingefügten Dokumente abgerufen werden können.

```
// Read JSON file content
String content = new String(Files.readAllBytes(Paths.get(jsonFileName)));
JSONArray jsonArray = new JSONArray(content);

// Convert JSON articles to Documents
List < Document > restaurants = new ArrayList < > ();
for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject jsonObject = jsonArray.getJSONObject(i);
    Document doc = Document.parse(jsonObject.toString());
    restaurants.add(doc);
}
//insert documents in collection
InsertManyResult result = collection.insertMany(restaurants);

System.out.println("Count of inserted documents: " + result.getInsertedIds().size());
```

**[https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/bulk/package-summary.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/bulk/package-summary.html)**

Die `bulkWrite()` Methode ermöglicht es, mehrere Schreiboperationen (Einfügen, Aktualisieren, Löschen) in einem einzigen Stapel durchzuführen. Sie können `bulkWrite()` sie verwenden, wenn Sie verschiedene Arten von Vorgängen in einem einzigen Stapel ausführen müssen, z. B. wenn Sie einige Dokumente einfügen und andere aktualisieren müssen. `bulkWrite()`unterstützt zwei Arten von Batch-Schreibvorgängen, geordnet und ungeordnet:
+ *Geordnete Operationen* — (Standard) Amazon DocumentDB verarbeitet die Schreibvorgänge sequentiell und stoppt beim ersten Fehler, auf den es stößt. Dies ist nützlich, wenn die Reihenfolge der Operationen wichtig ist, z. B. wenn spätere Operationen von früheren Vorgängen abhängen. Geordnete Operationen sind jedoch im Allgemeinen langsamer als ungeordnete Operationen. Bei geordneten Vorgängen müssen Sie den Fall berücksichtigen, dass der Stapel beim ersten Fehler stoppt und einige Operationen möglicherweise unbearbeitet bleiben.
+ *Ungeordnete Operationen* — Ermöglicht Amazon DocumentDB, Einfügungen als einzelne Ausführung in der Datenbank zu verarbeiten. Wenn bei einem Dokument ein Fehler auftritt, wird der Vorgang mit den übrigen Dokumenten fortgesetzt. Dies ist besonders nützlich, wenn Sie große Datenmengen einfügen und einige Fehler tolerieren können, z. B. bei der Datenmigration oder bei Massenimporten, bei denen einige Dokumente aufgrund doppelter Schlüssel fehlschlagen können. Bei ungeordneten Vorgängen müssen Sie teilweise Erfolgsszenarien berücksichtigen, in denen einige Operationen erfolgreich sind, während andere fehlschlagen.

Bei der Arbeit mit der `bulkWrite()` Methode sind einige wichtige Klassen erforderlich. Erstens dient die [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/WriteModel.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/WriteModel.html)Klasse als Basisklasse für alle Schreiboperationen und für spezifische Implementierungen wie [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/InsertOneModel.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/InsertOneModel.html),, [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/UpdateOneModel.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/UpdateOneModel.html), und [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/DeleteManyModel.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/DeleteManyModel.html)behandelt verschiedene Arten von Operationen.

Die [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/BulkWriteOptions.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/BulkWriteOptions.html)Klasse ist notwendig, um das Verhalten von Massenoperationen zu konfigurieren, z. B. die ordered/unordered Ausführung festzulegen oder die Dokumentenvalidierung zu umgehen. Die [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/bulk/BulkWriteResult.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/bulk/BulkWriteResult.html)Klasse bietet detaillierte Informationen zu den Ausführungsergebnissen, einschließlich der Anzahl der eingefügten, aktualisierten und gelöschten Dokumente.

Für die Fehlerbehandlung ist die [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/MongoBulkWriteException.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/MongoBulkWriteException.html)Klasse von entscheidender Bedeutung, da sie Informationen über alle Fehler während des Massenvorgangs enthält, während die [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/bulk/BulkWriteError.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/bulk/BulkWriteError.html)Klasse spezifische Details zu einzelnen Vorgangsfehlern enthält. Der folgende Code zeigt ein Beispiel für das Einfügen einer Liste von Dokumenten sowie das Aktualisieren und Löschen eines einzelnen Dokuments, alles innerhalb der Ausführung eines einzigen `bulkWrite()` Methodenaufrufs. Der Code zeigt auch, wie mit [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/BulkWriteOptions.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/BulkWriteOptions.html)und gearbeitet wird [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/bulk/BulkWriteResult.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/bulk/BulkWriteResult.html), sowie die korrekte Fehlerbehandlung der `bulkWrite()` Operation. 

```
List < WriteModel < Document >> bulkOperations = new ArrayList < > ();
// get list of 10 documents representing 10 restaurants
List < Document > restaurantsToInsert = getSampleData();

for (Document doc: restaurantsToInsert) {
    bulkOperations.add(new InsertOneModel < > (doc));
}
// Update operation
bulkOperations.add(new UpdateOneModel < > (
    new Document("restaurantId", "REST-Y2E9H5"),
    new Document("", new Document("stats.likes", 20))
    .append("", new Document("rating.average", 4.5))));
// Delete operation
bulkOperations.add(new DeleteOneModel < > (new Document("restaurantId", "REST-D2L431")));

// Perform bulkWrite operation
try {
    BulkWriteOptions options = new BulkWriteOptions()
        .ordered(false); // Allow unordered inserts

    BulkWriteResult result = collection.bulkWrite(bulkOperations, options);

    System.out.println("Inserted: " + result.getInsertedCount());
    System.out.println("Updated: " + result.getModifiedCount());
    System.out.println("Deleted: " + result.getDeletedCount());
} catch (MongoBulkWriteException e) {
    System.err.println("Bulk write error occurred: " + e.getMessage());
    // Log individual write errors
    for (BulkWriteError error: e.getWriteErrors()) {
        System.err.printf("Error at index %d: %s (Code: %d)%n", error.getIndex(), error.getMessage(),
            error.getCode());

        // Log the problematic document
        Document errorDoc = new Document(error.getDetails());
        if (errorDoc != null) {
            System.err.println("Problematic document: " + errorDoc);
        }
    }
} catch (Exception e) {
    System.err.println("Error during bulkWrite: " + e.getMessage());
}
```

**Wiederholbare Schreibvorgänge**

Im Gegensatz zu MongoDB unterstützt Amazon DocumentDB keine wiederholbaren Schreibvorgänge. Daher müssen Sie in ihren Anwendungen eine benutzerdefinierte Wiederholungslogik implementieren, insbesondere zur Behandlung von Netzwerkproblemen oder vorübergehender Nichtverfügbarkeit von Diensten. Eine gut implementierte Wiederholungsstrategie besteht in der Regel darin, die Verzögerung zwischen Wiederholungsversuchen zu erhöhen und die Gesamtzahl der Wiederholungsversuche zu begrenzen. [Fehlerbehandlung mit Wiederholungslogik](#error-handling)Im Folgenden finden Sie ein Codebeispiel für die Erstellung einer Wiederholungslogik mit Fehlerbehandlung.

## Lesen und Abrufen von Daten aus einer DocumentDB-Sammlung
<a name="reading-retrieving"></a>

Das Abfragen von Dokumenten in Amazon DocumentDB basiert auf mehreren Schlüsselkomponenten, mit denen Sie Daten präzise abrufen und bearbeiten können. Die [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoCollection.html#find()](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoCollection.html#find())Methode ist die grundlegende Abfrage APIs in MongoDB-Java-Treibern. Sie ermöglicht den komplexen Datenabruf mit zahlreichen Optionen zum Filtern, Sortieren und Projizieren von Ergebnissen. Neben der `find()` Methode [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/FindIterable.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/FindIterable.html)sind dies zwei weitere grundlegende Komponenten, [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/Filters.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/Filters.html)die die Bausteine für Abfrageoperationen in MongoDB-Java-Treibern bereitstellen.

Die `Filters` Klasse ist eine Hilfsklasse im MongoDB-Java-Treiber, die eine flüssige API zum Erstellen von Abfragefiltern bereitstellt. Diese Klasse bietet statische Factory-Methoden, die Instanzen von `Bson` Objekten erstellen, die verschiedene Abfragebedingungen repräsentieren. Zu den am häufigsten verwendeten Methoden gehören `eq()` für Gleichheitsvergleiche`gt()`,`lt()`,`gte()`, und `lte()` für numerische Vergleiche `and()` und `or()` für die Kombination mehrerer Bedingungen `in()` sowie `nin()` für Array-Zugehörigkeitstests und `regex()` für den Mustervergleich. Die Klasse ist typsicher konzipiert und bietet im Vergleich zu Abfragen, die auf Rohdokumenten basieren, eine bessere Überprüfung bei der Kompilierung. Daher ist sie der bevorzugte Ansatz für die Erstellung von DocumentDB-Abfragen in Java-Anwendungen. Die Fehlerbehandlung ist robust und bei ungültigen Filterkonstruktionen werden eindeutige Ausnahmen ausgelöst.

`FindIterable`ist eine spezielle Schnittstelle, die für die Verarbeitung des Ergebnisses der `find()` Methode entwickelt wurde. Es bietet eine Vielzahl von Methoden zur Verfeinerung und Steuerung der Abfrageausführung und bietet eine flüssige API für die Methodenverkettung. Die Schnittstelle umfasst grundlegende Methoden zur Änderung von Abfragen, z. B. `limit()` zur Beschränkung der Anzahl der zurückgegebenen Dokumente, `skip()` zur Seitennummerierung, zur Reihenfolge der Ergebnisse, `sort()` zur Auswahl bestimmter Felder und `projection()` zur Indexauswahl. `hint()` Die Batch-, Skip- und Limit-Operationen in `FindIterable` sind wichtige Tools zur Seitennummerierung und Datenverwaltung, mit deren Hilfe gesteuert werden kann, wie Dokumente aus der Datenbank abgerufen und verarbeitet werden.

Batching (`batchSize`) steuert, wie viele Dokumente DocumentDB in einem einzigen Netzwerk-Roundtrip an den Client zurückgibt. Wenn Sie eine Stapelgröße festlegen, gibt DocumentDB nicht alle passenden Dokumente auf einmal zurück, sondern gibt sie in Gruppen mit der angegebenen Stapelgröße zurück. 

Mit Skip können Sie den Startpunkt Ihrer Ergebnisse verschieben und DocumentDB im Wesentlichen anweisen, eine bestimmte Anzahl von Dokumenten zu überspringen, bevor Treffer zurückgegeben werden. Beispielsweise `skip(20)` werden die ersten 20 übereinstimmenden Dokumente umgangen. Dies wird häufig in Paginierungsszenarien verwendet, in denen Sie nachfolgende Ergebnisseiten abrufen möchten. 

Limit schränkt die Gesamtzahl der Dokumente ein, die von einer Abfrage zurückgegeben werden können. Wenn Sie angeben`limit(n)`, beendet DocumentDB die Rückgabe von Dokumenten, nachdem 'n' Dokumente zurückgegeben wurden, auch wenn es mehr Treffer in der Datenbank gibt. 

`FindIterable`unterstützt sowohl Iterator- als auch Cursormuster beim Abrufen von Dokumenten aus Amazon DocumentDB. Der Vorteil der Verwendung `FindIterable` als Iterator besteht darin, dass Dokumente verzögert geladen werden können und Dokumente nur abgerufen werden, wenn sie von der Anwendung angefordert werden. Ein weiterer Vorteil der Verwendung von Iterator besteht darin, dass Sie nicht für die Aufrechterhaltung der Verbindung zum Cluster verantwortlich sind und daher kein explizites Schließen der Verbindung erforderlich ist. 

`FindIterable`bietet auch Unterstützung für [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoCursor.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoCursor.html)die Verwendung von Cursormustern bei der Arbeit mit Amazon DocumentDB DocumentDB-Abfragen. `MongoCursor`ist eine mongoDB-Java-Treiberspezifische Implementierung, die die Kontrolle über Datenbankoperationen und Ressourcenmanagement bietet. Sie implementiert die `AutoCloseable` Schnittstelle und ermöglicht so eine explizite Ressourcenverwaltung über try-with-resources Blöcke, was für das ordnungsgemäße Schließen von Datenbankverbindungen und die Freigabe von Serverressourcen von entscheidender Bedeutung ist. Standardmäßig läuft der Cursor innerhalb von 10 Minuten ab, und DocumentDB bietet Ihnen nicht die Möglichkeit, dieses Timeout-Verhalten zu ändern. Achten Sie bei der Arbeit mit Batchdaten darauf, den nächsten Datenstapel abzurufen, bevor der Cursor das Timeout erreicht. Ein wichtiger Aspekt bei der Verwendung `MongoCursor` ist, dass ein explizites Schließen erforderlich ist, um Ressourcenlecks zu verhindern.

In diesem Abschnitt werden mehrere Beispiele für`find()`, `Filters` und vorgestellt`FindIterable`.

Das folgende Codebeispiel zeigt, wie Sie `find()` mithilfe des Felds „RestaurantID“ ein einzelnes Dokument abrufen können:

```
Document filter = new Document("restaurantId", "REST-21G145");
Document result = collection.find(filter).first();
```

Die Verwendung `Filters` ermöglicht zwar eine bessere Fehlerprüfung bei der Kompilierung, mit dem Java-Treiber können Sie jedoch auch einen `Bson` Filter direkt in der `find()` Methode angeben. Der folgende Beispielcode übergibt `Bson` das Dokument an`find()`:

```
result = collection.find(new Document("$and", Arrays.asList(
    new Document("rating.totalReviews", new Document("$gt", 1000)),
    new Document("priceRange", "$$"))))
```

Der nächste Beispielcode zeigt mehrere Beispiele für die Verwendung der `Filters` Klasse mit`find()`:

```
FindIterable < Document > results;

// Exact match
results = collection.find(Filters.eq("name", "Thai Curry Palace"));

// Not equal
results = collection.find(Filters.ne("cuisine", "Thai"));

// find an element in an array
results = collection.find(Filters.in("features", Arrays.asList("Private Dining")));

// Greater than
results = collection.find(Filters.gt("rating.average", 3.5));

// Between (inclusive)
results = collection.find(Filters.and(
    Filters.gte("rating.totalReviews", 100),
    Filters.lte("rating.totalReviews", 200)));
// AND
results = collection.find(Filters.and(
    Filters.eq("cuisine", "Thai"),
    Filters.gt("rating.average", 4.5)));

// OR
results = collection.find(Filters.or(
    Filters.eq("cuisine", "Thai"),
    Filters.eq("cuisine", "American")));


// All document where the Field exists
results = collection.find(Filters.exists("michelin"));

// Regex
results = collection.find(Filters.regex("name", Pattern.compile("Curry", Pattern.CASE_INSENSITIVE)));

// Find all document where the array contain the list of value regardless of its order
results = collection.find(Filters.all("features", Arrays.asList("Private Dining", "Parking")));

// Array size
results = collection.find(Filters.size("features", 4));
```

Das folgende Beispiel zeigt, wie die Operationen von`sort()`, `skip()``limit()`, und `batchSize()` an einem `FindIterable` Objekt verkettet werden. Die Reihenfolge, in der diese Operationen ausgeführt werden, beeinflusst die Leistung Ihrer Abfrage. Als bewährte Methode sollte die Reihenfolge dieser Operationen`sort()`, `projection()``skip()`, `limit()` und lauten`batchSize()`.

```
FindIterable < Document > results = collection.find(Filters.gt("rating.totalReviews", 1000))
    // Sorting
    .sort(Sorts.orderBy(
        Sorts.descending("address.city"),
        Sorts.ascending("cuisine")))
    // Field selection
    .projection(Projections.fields(
        Projections.include("name", "cuisine", "priceRange"),
        Projections.excludeId()))

    // Pagination
    .skip(20)
    .limit(10)
    .batchSize(2);
```

Der folgende Beispielcode zeigt die Erstellung eines Iterators am`FindIterable`. Es verwendet das `forEach` Java-Konstrukt, um die Ergebnismenge zu durchlaufen.

```
collection.find(Filters.eq("cuisine", "American")).forEach(doc -> System.out.println(doc.toJson()));
```

Im letzten `find()` Codebeispiel wird gezeigt, wie es zum Abrufen von Dokumenten verwendet `cursor()` wird. Es erstellt den Cursor im Try-Block, wodurch sichergestellt wird, dass der Cursor geschlossen wird, wenn der Code den Try-Block verlässt.

```
try (MongoCursor < Document > cursor = collection.find(Filters.eq("cuisine", "American"))
    .batchSize(25)
    .cursor()) {
    while (cursor.hasNext()) {
        Document doc = cursor.next();
        System.out.println(doc.toJson());
    }
} // Cursor automatically closed
```

## Aktualisieren vorhandener Dokumente in einer DocumentDB-Sammlung
<a name="updating-documents"></a>

Amazon DocumentDB bietet flexible und leistungsstarke Mechanismen zum Ändern vorhandener Dokumente und zum Einfügen neuer Dokumente, wenn sie nicht existieren. Der MongoDB-Java-Treiber bietet mehrere Methoden für Updates: `updateOne()` für die Aktualisierung einzelner Dokumente, `updateMany()` für die Aktualisierung mehrerer Dokumente und `replaceOne()` für den vollständigen Austausch von Dokumenten. Neben diesen drei Methoden [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/result/UpdateResult.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/result/UpdateResult.html)sind, [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/Updates.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/Updates.html), und weitere grundlegende Komponenten, die die Bausteine für Aktualisierungsvorgänge in MongoDB-Java-Treibern bereitstellen. 

Die `Updates` Klasse im MongoDB-Java-Treiber ist eine Hilfsklasse, die statische Factory-Methoden zum Erstellen von Aktualisierungsoperatoren bereitstellt. Sie dient als primärer Builder für die typsichere und lesbare Konstruktion von Aktualisierungsoperationen. Grundlegende Methoden wie `set()``unset()`, und `inc()` ermöglichen die direkte Änderung der Dokumente. Die Leistungsfähigkeit dieser Klasse wird deutlich, wenn mehrere Operationen mit der `Updates.combine()` Methode kombiniert werden, mit der mehrere Aktualisierungsvorgänge atomar ausgeführt werden können, wodurch die Datenkonsistenz gewährleistet wird.

`UpdateOptions`ist eine leistungsstarke Konfigurationsklasse im Java-Treiber von MongoDB, die grundlegende Anpassungsmöglichkeiten für Dokumentaktualisierungsvorgänge bietet. Zwei wichtige Aspekte dieser Klasse sind die Unterstützung von Upsert- und Array-Filtern für Aktualisierungsvorgänge. Die Upsert-Funktion, aktiviert durch`upsert(true)`, ermöglicht die Erstellung neuer Dokumente, wenn während eines Aktualisierungsvorgangs keine passenden Dokumente gefunden werden. Durch `arrayFilters()` den Aktualisierungsvorgang können Array-Elemente, die bestimmte Kriterien erfüllen, präzise aktualisiert werden.

`UpdateResult`Der Java-Treiber von MongoDB bietet den Feedback-Mechanismus, der das Ergebnis eines Aktualisierungsvorgangs detailliert beschreibt. Diese Klasse fasst drei wichtige Kennzahlen zusammen: die Anzahl der Dokumente, die den Aktualisierungskriterien entsprechen (`matchedCount`), die Anzahl der tatsächlich geänderten Dokumente (`modifiedCount`) und Informationen über alle geänderten Dokumente (). `upsertedId` Das Verständnis dieser Metriken ist für die korrekte Fehlerbehandlung, die Überprüfung von Aktualisierungsvorgängen und die Aufrechterhaltung der Datenkonsistenz in Anwendungen unerlässlich.

### Aktualisieren und ersetzen Sie ein einzelnes Dokument
<a name="update-single-doc"></a>

In DocumentDB kann die Aktualisierung eines einzelnen Dokuments mit der Methode updateOne () durchgeführt werden. Diese Methode verwendet einen Filterparameter, der normalerweise von der `Filters` Klasse bereitgestellt wird, um das zu aktualisierende Dokument zu identifizieren, einen `Updat` e-Parameter, der bestimmt, welche Felder aktualisiert werden sollen, und einen optionalen `UpdateOptions` Parameter, um verschiedene Optionen für die Aktualisierung festzulegen. Bei Verwendung `updateOne()` dieser Methode wird nur das erste Dokument aktualisiert, das den Auswahlkriterien entspricht. Der folgende Beispielcode aktualisiert ein einzelnes Feld eines Dokuments:

```
collection.updateOne(Filters.eq("restaurantId", "REST-Y2E9H5"),
    Updates.set("name", "Amazing Japanese sushi"));
```

Um mehrere Felder in einem Dokument zu aktualisieren, verwenden Sie `updateOne()` with `Update.combine()` wie im folgenden Beispiel gezeigt. Dieses Beispiel zeigt auch, wie ein Element zu einem Array im Dokument hinzugefügt wird.

```
List<Bson> updates = new ArrayList<>();
// Basic field updates
updates.add(Updates.set("name", "Shanghai Best"));
// Array operations
updates.add(Updates.addEachToSet("features", Arrays.asList("Live Music")));
// Counter updates
updates.add(Updates.inc("rating.totalReviews", 10));
// Combine all updates
Bson combinedUpdates = Updates.combine(updates);
// Execute automic update with one call
collection.updateOne(Filters.eq("restaurantId","REST-1J83NH"), combinedUpdates);
```

Das folgende Codebeispiel zeigt, wie ein Dokument in der Datenbank aktualisiert wird. Wenn das angegebene Dokument nicht existiert, wird es stattdessen automatisch als neues Dokument eingefügt. Dieser Code zeigt auch, wie die über das `UpdateResult` Objekt verfügbaren Metriken verwendet werden.

```
Bson filter = Filters.eq("restaurantId", "REST-0Y9GL0");
Bson update = Updates.set("cuisine", "Indian");
// Upsert operation
UpdateOptions options = new UpdateOptions().upsert(true);
UpdateResult result = collection.updateOne(filter, update, options);

if (result.getUpsertedId() != null) {
   	System.out.println("Inserted document with _id: " + result.getUpsertedId());
} else {
    	System.out.println("Updated " + result.getModifiedCount() + " document(s)");
}
```

Das folgende Codebeispiel zeigt, wie Sie mithilfe der `replaceOne()` Methode ein vorhandenes Dokument vollständig durch ein neues Dokument ersetzen können, anstatt einzelne Felder zu aktualisieren. Die `replaceOne()` Methode überschreibt das gesamte Dokument, wobei nur das `_id` Feld des Originals beibehalten wird. Wenn mehrere Dokumente den Filterkriterien entsprechen, wird nur das zuerst gefundene Dokument ersetzt.

```
Document newDocument = new Document()
                .append("restaurantId", "REST-0Y9GL0")
                .append("name", "Bhiryani Adda")
                .append("cuisine", "Indian")
                .append("rating", new Document()
                        .append("average", 4.8)
                        .append("totalReviews", 267))
                .append("features", Arrays.asList("Outdoor Seating", "Live Music"));

UpdateResult result = collection.replaceOne(
                    Filters.eq("restaurantId", "REST-0Y9GL0"),
                    newDocument);
System.out.printf("Modified %d document%n", result.getModifiedCount());
```

### Aktualisieren Sie mehrere Dokumente
<a name="update-multiple-docs"></a>

Es gibt zwei Möglichkeiten, mehrere Dokumente in einer Sammlung gleichzeitig zu aktualisieren. Sie können die `updateMany()` Methode oder die [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/UpdateManyModel.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/UpdateManyModel.html)mit der `bulkWrite()` Methode verwenden. Die `updateMany()` Methode verwendet einen Filterparameter, um Dokumente für die Aktualisierung auszuwählen, den `Update` Parameter zur Identifizierung der zu aktualisierenden Felder und einen optionalen `UpdateOptions` Parameter zur Angabe von Aktualisierungsoptionen.

Der folgende Beispielcode demonstriert die Verwendung der `updateMany()` Methode:

```
Bson filter = Filters.and(
    Filters.in("features", Arrays.asList("Private Dining")),
    Filters.eq("cuisine", "Thai"));
UpdateResult result1 = collection.updateMany(filter, Updates.set("priceRange", "$$$"));
```

Der folgende Beispielcode demonstriert die `bulkWrite()` Methode mit demselben Update:

```
BulkWriteOptions options = new BulkWriteOptions().ordered(false);
List < WriteModel < Document >> updates = new ArrayList < > ();
Bson filter = Filters.and(
    Filters.in("features", Arrays.asList("Private Dining")),
    Filters.eq("cuisine", "Indian"));
Bson updateField = Updates.set("priceRange", "$$$");
updates.add(new UpdateManyModel < > (filter, updateField));
BulkWriteResult result = collection.bulkWrite(updates, options);
System.out.printf("Modified %d document%n", result.getModifiedCount());
```

## Dokumente aus einer DocumentDB-Sammlung entfernen
<a name="deleting-documents"></a>

Der MongoDB-Java-Treiber bietet `deleteOne()` die Möglichkeit, ein einzelnes Dokument und mehrere Dokumente `deleteMany()` zu entfernen, die bestimmten Kriterien entsprechen. Genau wie beim Aktualisieren kann auch der Löschvorgang mit der `bulkWrite()` Methode verwendet werden. Beides `deleteOne()` und gibt ein [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/result/DeleteResult.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/result/DeleteResult.html)Objekt `deleteMany()` zurück, das Informationen über das Ergebnis des Vorgangs enthält, einschließlich der Anzahl der gelöschten Dokumente. Im Folgenden finden Sie ein Beispiel für die Verwendung `deleteMany()` zum Entfernen mehrerer Dokumente:

```
Bson filter = Filters.and(
    Filters.eq("cuisine", "Thai"),
    Filters.lt("rating.totalReviews", 50));
DeleteResult result = collection.deleteMany(filter);
System.out.printf("Deleted %d document%n", result.getDeletedCount());
```

## Fehlerbehandlung mit Wiederholungslogik
<a name="error-handling"></a>

Eine robuste Strategie zur Fehlerbehandlung für Amazon DocumentDB sollte die Kategorisierung von Fehlern in wiederholbare Fehler (wie Netzwerk-Timeouts, Verbindungsprobleme) und nicht wiederholbare Fehler (wie Authentifizierungsfehler, ungültige Abfragen) implementieren. Bei Betriebsfehlern aufgrund von Fehlern, die wiederholt werden sollten, sollte eine Zeitverzögerung zwischen den einzelnen Wiederholungsversuchen sowie die maximale Anzahl von Wiederholungsversuchen vorgesehen werden. Die CRUD-Operationen sollten sich in einem Try-Catch-Block befinden, der Catches [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/MongoException.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/MongoException.html)und seine Unterklassen enthält. Darüber hinaus sollte es die Überwachung und Protokollierung von Fehlern beinhalten, um die betriebliche Transparenz zu gewährleisten. Im Folgenden finden Sie einen Beispielcode, der zeigt, wie die Behandlung von Wiederholungsfehlern implementiert wird:

```
int MAX_RETRIES = 3;
int INITIAL_DELAY_MS = 1000;
int retryCount = 0;

while (true) {
    try {
        crud_operation(); //perform crud that will throw MongoException or one of its subclass
        break;
    } catch (MongoException e) {
        if (retryCount < MAX_RETRIES) {
            retryCount++;
            long delayMs = INITIAL_DELAY_MS * (long) Math.pow(2, retryCount - 1);
            try {
                TimeUnit.MILLISECONDS.sleep(delayMs);
            } catch (InterruptedException t) {
                Thread.currentThread().interrupt();
                throw new RuntimeException("Retry interrupted", t);
            }
            continue;
        } else
            throw new RuntimeException("Crud operation failed", e);
    }
}
```

# Indexverwaltung in Amazon DocumentDB mit Java
<a name="index-management-java"></a>

Indizes ermöglichen das effiziente Abrufen von Daten aus einer Amazon DocumentDB-Sammlung. Ohne Indizes muss DocumentDB jedes Dokument in der Sammlung scannen, um Ergebnisse zurückzugeben, die einer bestimmten Abfrage entsprechen. Dieses Thema enthält Informationen zum Erstellen, Löschen und Auflisten von Indizes mithilfe der MongoDB-Java-Treiber. Außerdem wird erläutert, wie ermittelt werden kann, ob ein bestimmter Index in der Abfrage verwendet wird, und wie Amazon DocumentDB Hinweise zur Verwendung eines bestimmten Indexes gegeben werden kann.

**Topics**
+ [Erstellen von Indizes](#creating-indexes)
+ [Indizes löschen](#dropping-indes)
+ [Festlegung der Indexauswahl und Bereitstellung eines Indexhinweises](#w2aac43b9b7c17c13)

Amazon DocumentDB unterstützt viele Arten von Indizes. [Einen umfassenden Überblick über alle unterstützten Indizes finden Sie in diesem Blogbeitrag.](https://aws.amazon.com/blogs/database/how-to-index-on-amazon-documentdb-with-mongodb-compatibility/) 

## Indizes mit Java erstellen
<a name="creating-indexes"></a>

Es gibt zwei Mechanismen zum Erstellen von Indizes in Amazon DocumentDB mithilfe von MongoDB-Java-Treibern: durch `runCommand()` und entweder durch die `createIndex()` Methode für einen einzelnen Index oder durch die `createIndexes()` Methode für mehrere Indizes. Ein Grund für die Verwendung der `createIndexes()` Methoden `createIndex()` und besteht darin, dass Sie eine bessere Fehlerbehandlung aufbauen können, indem Sie bestimmte Fehler im Zusammenhang mit der Indexerstellung abfangen. Ein weiterer Grund für die Verwendung dieser Methode `runCommand()` ist, dass der MongDB-Java-Treiber eine Vielzahl von unterstützenden Klassen für die Indexerstellung und -manipulation bereitstellt. Beachten Sie, dass diese unterstützenden Klassen nur verwendet werden können, wenn Sie die Methoden `createIndex()` oder `createIndexes()` verwenden. Es gibt drei unterstützende Klassen:
+ **[https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/Indexes.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/Indexes.html)**— Diese Klasse dient als Hilfsklasse und bietet statische Factory-Methoden zur Erstellung verschiedener Arten von Indizes. Sie vereinfacht den Prozess der Erstellung komplexer Indexdefinitionen und wird häufig in Verbindung mit anderen indexbezogenen Klassen verwendet.
+ **[https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/IndexModel.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/IndexModel.html)**— Dies ist eine grundlegende Klasse, die sowohl die Definition der Indexschlüssel als auch ihre Optionen kapselt. Sie stellt eine vollständige Indexspezifikation dar, die kombiniert, was indexiert werden soll (die Schlüssel) und wie indexiert werden soll (die Optionen). Diese Klasse ist besonders nützlich, wenn Sie mehrere Indizes gleichzeitig erstellen, da Sie damit eine Sammlung von Indexspezifikationen definieren können, die an die `createIndexes()` Methode übergeben werden können.
+ **[https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/IndexOptions.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/IndexOptions.html)**— Dies ist eine umfassende Konfigurationsklasse, die eine Vielzahl von Methoden zur Anpassung des Indexverhaltens bietet. Sie umfasst Einstellungen für eindeutige Indizes, Sparse-Indizes, Ablaufzeit (TTL) und partielle Filterausdrücke. Durch Methodenverkettung können Sie mehrere Optionen wie die Indexerstellung im Hintergrund und eindeutige Einschränkungen konfigurieren.

**Erstellen Sie einen einzelnen Index**

Dieses Beispiel zeigt, wie ein einzelner Index mit der Methode `createIndex(` () im Hintergrund erstellt wird. Informationen zur Indexerstellung im Hintergrund und Vordergrund finden Sie unter[Typen der Indexerstellung](managing-indexes.md#index-build-types). Im folgenden Codebeispiel wird [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/IndexOptions.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/IndexOptions.html)ein eindeutiger Index mit dem Namen „unique\$1restaurantID\$1IDX“ im Hintergrund erstellt. Dieses `IndexOptions` Objekt wird dann an die Methode übergeben. `createIndex()`

```
collection.createIndex(
    Indexes.ascending("restaurantId"),
    new IndexOptions()
        .unique(true)
        .name("unique_restaurantId_idx")
        .background(true));
```

**Erstellen Sie mehrere Indizes**

In diesem Beispiel werden mithilfe der Methode mehrere Indizes erstellt. `createIndexes()` Es erstellt zuerst die Option für jeden Index mithilfe des [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/IndexModel.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/IndexModel.html)Objekts und übergibt dann eine Liste von `IndexModel` Objekten an die `createIndexes()` Methode. Das folgende Codebeispiel zeigt, wie ein zusammengesetzter Index mithilfe der [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/Indexes.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/Indexes.html)Utility-Klasse erstellt wird. Diese Klasse wird auch verwendet, um anzugeben, ob Sie einen Index mit aufsteigender oder absteigender Sortierreihenfolge erstellen möchten. Nach dem Erstellen mehrerer Indizes überprüft sie die Indexerstellung, indem sie die Methode aufruft. `listIndexes()`

```
// Single Field Index on cuisine
IndexModel singleIndex = new IndexModel(
    Indexes.ascending("cuisine"),
    new IndexOptions().name("cuisine_idx"));

// Compound Index
IndexModel compoundIndex = new IndexModel(
    Indexes.compoundIndex(
        Indexes.ascending("address.state"),
        Indexes.ascending("priceRange")),
    new IndexOptions().name("location_price_idx"));

// Build a list of IndexModel for the indexes
List < IndexModel > indexes = Arrays.asList(
    singleIndex,
    compoundIndex
);

collection.createIndexes(indexes);

// Verify created indexes
collection.listIndexes().forEach(index - > System.out.println("Created index: " + index.toJson()));
```

**Erstellen Sie dünnbesetzte Indizes und partielle Indizes**

Dieses Beispiel zeigt, dass ein dünnbesetzter Index und ein partieller Index erstellt werden, indem [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/IndexModel.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/IndexModel.html)für jeden Indextyp ein Index erstellt wird.

```
// Sparse Index Model, this will identify only those documents that have a
// michelin star rating
IndexModel sparseIndex = new IndexModel(
    Indexes.ascending("michelin.star"),
    new IndexOptions()
    .name("michelin_sparse_idx")
    .sparse(true));

// Partial Index Model where the restaurant is active and has a rating of 4 and above
IndexModel partialIndex = new IndexModel(
    Indexes.ascending("rating.average"),
    new IndexOptions()
    .name("high_rated_active_idx")
    .partialFilterExpression(
        Filters.and(
            Filters.eq("isActive", true),
            Filters.gte("rating.average", 4.0))));
```

**Erstellen Sie einen Textindex**

Dieses Beispiel zeigt, wie ein Textindex erstellt wird. In einer Sammlung ist nur ein Textindex zulässig, aber dieser eine Textindex kann ein zusammengesetzter Index sein, der mehrere Felder abdeckt. Wenn Sie mehrere Felder im Textindex verwenden, können Sie auch jedem Feld im Index Gewichtungen zuweisen. Textindizes für Array-Felder werden von Amazon DocumentDB nicht unterstützt, und obwohl Sie bis zu 30 Felder im zusammengesetzten Textindex verwenden können, kann nur drei Feldern eine Gewichtung zugewiesen werden.

```
IndexModel textIndex = new IndexModel(
    new Document()
    .append("name", "text")
    .append("description", "text")
    .append("cuisine", "text"),
    new IndexOptions()
    .name("restaurant_text_idx")
    .weights(new Document()
        .append("name", 10) // Restaurant name gets highest weight
        .append("description", 5) // Description get medium weight
        .append("cuisine", 2) // Cuisine type gets low weight
    ));

collection.createIndex(textIndex.getKeys(), textIndex.getOptions());
```

**Erstellen Sie einen Index mit `runCommand()`**

Amazon DocumentDB unterstützt die parallel Indexerstellung, um den Zeitaufwand für die Erstellung von Indizes zu verringern. Bei der parallelen Indizierung werden mehrere Worker gleichzeitig verwendet. Für die Indexerstellung werden standardmäßig zwei Worker verwendet. Dieser [Blogbeitrag](https://aws.amazon.com/blogs/database/unlock-the-power-of-parallel-indexing-in-amazon-documentdb/) bietet eine eingehende Diskussion zur parallel Indizierung. Derzeit unterstützen MongDB-Java-Treiber die Angabe der Worker-Option nicht, wenn Sie `createIndex()` oder `createIndexes()` verwenden. Daher können Sie Worker nur über die angeben. `runCommand` Das folgende Codebeispiel zeigt, wie Sie `runCommand` einen Index erstellen, der den Worker auf vier erhöht:

```
Document command = new Document("createIndexes", "Restaurants")
    .append("indexes", Arrays.asList(
        new Document("key", new Document("name", 1))
        .append("name", "restaurant_name_idx")
        .append("workers", 4) // Specify number of workers
    ));

Document commendResult = connectedDB.runCommand(command);
```

## Indizes löschen
<a name="dropping-indes"></a>

Der MongoDB-Java-Treiber bietet mehrere Methoden zum Löschen von Indizes, die auf unterschiedliche Szenarien und Ihre Präferenzen zugeschnitten sind. Sie können Indizes nach Namen, nach Schlüsselspezifikation oder alle Indizes auf einmal löschen. Die Methoden `dropIndex()` und `dropIndexes()` können für ein Auflistungsobjekt aufgerufen werden, um einen Index zu löschen. Wenn Sie einen Index nach Namen löschen, sollten Sie sicherstellen, dass der richtige Indexname verwendet wird, was möglicherweise nicht immer intuitiv ist, insbesondere bei zusammengesetzten oder automatisch generierten Indizes. Der Versuch, einen nicht existierenden Index zu löschen, führt zu einem. [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/MongoCommandException.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/MongoCommandException.html) Der `default _id` Index kann nicht gelöscht werden, da er die Einzigartigkeit des Dokuments innerhalb der Sammlung sicherstellt.

Das folgende Codebeispiel zeigt, wie ein Index gelöscht wird, indem der Feldname angegeben wird, in dem der Index erstellt wurde, oder indem alle Indizes gelöscht werden: 

```
String indexName = "unique_restaurantId_idx";
Document keys = new Document("cuisine", 1);
// Drop index by name
collection.dropIndex(indexName);
            
// Drop index by keys
collection.dropIndex(keys);
            
// Drop all indexes
collection.dropIndexes();
```

Stellen Sie beim Löschen von Indizes mit mehreren Schlüsseln sicher, dass ein zusammengesetzter Index vorhanden ist, der alle angegebenen Schlüssel enthält und dass die Reihenfolge der Schlüssel korrekt ist. Der obige Beispielcode zur Indexerstellung zeigt einen zusammengesetzten Schlüssel für „Küche“ und Funktionen. Wenn Sie versuchen, diesen zusammengesetzten Schlüssel zu löschen, aber die Reihenfolge nicht der Reihenfolge entspricht, in der er erstellt wurde, tritt ein MongoCommnadException Fehler wie folgt auf:

```
Document keys = new Document("features", 1)
    .append("cuisine", 1);
try {
    // Drop index by keys
    collection.dropIndex(keys);
    System.out.println("Successfully dropped index with keys: " + keys.toJson());

} catch (MongoCommandException commErr) {
    System.out.println("Error dropping index: " + commErr.getErrorMessage());
    throw new RuntimeException("MongoCommandException was thrown while dropping index", commErr);
}
```

Der folgende Fehler wird angezeigt:

```
Error dropping index: Cannot drop index: index not found.
Tests run: 3, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.819 sec <<< FAILURE!
com.amazon.docdb.guide.DocDBGuideTest.testindexGuide()  Time elapsed: 0.817 sec  <<< FAILURE!
org.opentest4j.AssertionFailedError: Unexpected exception thrown: java.lang.RuntimeException: MongoCommandException was thrown while dropping index
```

## Festlegung der Indexauswahl und Bereitstellung eines Indexhinweises
<a name="w2aac43b9b7c17c13"></a>

Die Arbeit mit der Erklärungsfunktion in Amazon DocumentDB ist entscheidend, um die Abfrageleistung und die Indexnutzung zu verstehen. Wenn Sie eine Abfrage ausführen, können Sie die `explain()` Methode anhängen, um detaillierte Informationen über den Abfrageplan zu erhalten, einschließlich der verwendeten Indizes. Die `explain()` Ausgabe bietet Einblicke in die Phasen der Abfrageausführung, die Anzahl der untersuchten Dokumente und die für jede Phase benötigte Zeit. Diese Informationen sind von unschätzbarem Wert, um festzustellen, ob ein bestimmter Index effektiv verwendet wird oder ob die Abfrage von einer anderen Indexstruktur profitieren könnte.

Die `explain()` Methode kann mit der Methode verkettet werden. `find()` Die `explain()` Methode kann eine optionale [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/ExplainVerbosity.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/ExplainVerbosity.html)Aufzählung verwenden, die den Grad der Ausführlichkeit bestimmt, der von zurückgegeben wird. `explain()` Derzeit werden nur die `QUERY_PLANNER` Enumeratoren `EXECUTION_STATS` und von DocumentDB unterstützt. Das folgende Codebeispiel zeigt, wie der Abfrageplaner für eine bestimmte Abfrage abgerufen wird:

```
// Query we want to analyze
Document query = new Document()
    .append("cuisine", "Thai")
    .append("rating.average", new Document("$gte", 4.0));


Document allPlansExplain = collection.find(query).explain(ExplainVerbosity.QUERY_PLANNER);
System.out.println("All Plans Explain:\n" + allPlansExplain.toJson());
```

Das folgende JSON-Dokument wird für die Ausführlichkeitsstufe des Abfrageplaners zurückgegeben:

```
{
  "queryPlanner": {
    "plannerVersion": 1,
    "namespace": "ProgGuideData.Restaurants",
    "winningPlan": {
      "stage": "IXSCAN",
      "indexName": "cuisine_idx",
      "direction": "forward"
    }
  },
  "serverInfo": {
    "host": "guidecluster3",
    "port": 27017,
    "version": "5.0.0"
  },
  "ok": 1,
  "operationTime": {
    "$timestamp": {
      "t": 1739221668,
      "i": 1
    }
  }
}
```

Sie haben mehrere Möglichkeiten, Amazon DocumentDB zu beeinflussen oder zu zwingen, einen bestimmten Index zu verwenden. Mit den `hintString()` Methoden `hint()` und können Sie das Standardverhalten des Abfrageoptimierers bei der Indexauswahl außer Kraft setzen, indem Sie explizit angeben, welcher Index für eine Abfrage verwendet werden soll. Der Abfrageoptimierer von DocumentDB ist zwar generell eine gute Wahl für die Indexauswahl, es gibt jedoch auch Szenarien, in denen das `hint()` Durchsetzen eines bestimmten Indexes von Vorteil sein `hintString()` kann, z. B. beim Umgang mit verzerrten Daten oder beim Testen der Indexleistung.

Das folgende Codebeispiel erzwingt die Verwendung des zusammengesetzten Index „cuisine\$1features\$1idx“ für dieselbe Abfrage, die im obigen Code ausgeführt wurde:

```
// Query we want to analyze
Document query = new Document()
    .append("cuisine", "Thai")
    .append("rating.average", new Document("$gte", 4.0));

List < Document > queryDocs = new ArrayList < > ();
collection.find(query).hintString("cuisine_features_idx").forEach(doc - > queryDocs.add(doc));
```

# Ereignisgesteuerte Programmierung mit Amazon DocumentDB und Java
<a name="event-driven-programming"></a>

Die ereignisgesteuerte Programmierung im Kontext von Amazon DocumentDB stellt ein leistungsstarkes Architekturmuster dar, bei dem Datenbankänderungen als primäre Ereignisgeneratoren dienen, die nachfolgende Geschäftslogik und -prozesse auslösen. Wenn Datensätze in eine DocumentDB-Auflistung eingefügt, aktualisiert oder gelöscht werden, wirken sich diese Änderungen als Ereignisse aus, die automatisch verschiedene nachgelagerte Prozesse, Benachrichtigungen oder Datensynchronisierungsaufgaben auslösen. Dieses Muster ist besonders nützlich in modernen verteilten Systemen, in denen mehrere Anwendungen oder Dienste in Echtzeit auf Datenänderungen reagieren müssen. Der Hauptmechanismus für die Implementierung ereignisgesteuerter Programmierung in DocumentDB sind Change-Streams.

**Anmerkung**  
In diesem Handbuch wird davon ausgegangen, dass Sie Change-Streams für eine Sammlung aktiviert haben, mit der Sie arbeiten. Weitere Informationen [Change-Streams mit Amazon DocumentDB verwenden](change_streams.md) zum Aktivieren von Change-Streams in der Sammlung finden Sie unter. 

**Arbeiten mit Change-Streams aus der Java-Anwendung**

Die `watch()` Methode im Java-Treiber von MongoDB ist der wichtigste Mechanismus zur Überwachung von Datenänderungen in Echtzeit in Amazon DocumentDB. Die `watch()` Methode kann von Objekten [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoClient.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoClient.html), und [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoCollection.html#watch()](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoCollection.html#watch())aufgerufen werden.

Die `watch()` Methode gibt eine Instanz zurück [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/ChangeStreamIterable.html#startAtOperationTime(org.bson.BsonTimestamp)](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/ChangeStreamIterable.html#startAtOperationTime(org.bson.BsonTimestamp)), die verschiedene Konfigurationsoptionen unterstützt, darunter die vollständige Suche nach Aktualisierungen in Dokumenten, die Bereitstellung von Wiederaufnahmetokens und Zeitstempeln für die Zuverlässigkeit sowie Pipeline-Aggregationsphasen zum Filtern von Änderungen. 

[https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/ChangeStreamIterable.html#startAtOperationTime(org.bson.BsonTimestamp)](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/ChangeStreamIterable.html#startAtOperationTime(org.bson.BsonTimestamp))implementiert die Java-Kernschnittstelle `Iterable` und kann mit verwendet werden. `forEach()` Um Ereignisse mithilfe von zu erfassen`forEach()`, übergeben Sie eine Callback-Funktion an`forEach()`, die das geänderte Ereignis verarbeitet. Der folgende Codeausschnitt zeigt, wie Sie einen Change-Stream für eine Sammlung öffnen, um die Überwachung von Änderungsereignissen zu starten:

```
ChangeStreamIterable < Document > iterator = collection.watch();
iterator.forEach(event - > {
    System.out.println("Received a change: " + event);
});
```

Eine andere Möglichkeit, alle Änderungsereignisse zu durchlaufen, besteht darin, einen Cursor zu öffnen, der eine Verbindung zum Cluster aufrechterhält und kontinuierlich neue Änderungsereignisse empfängt, sobald sie auftreten. Um einen Change-Streams-Cursor zu erhalten, verwenden Sie die `cursor()` Methode object. [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/ChangeStreamIterable.html#startAtOperationTime(org.bson.BsonTimestamp)](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/ChangeStreamIterable.html#startAtOperationTime(org.bson.BsonTimestamp)) Das folgende Codebeispiel zeigt, wie Änderungsereignisse mithilfe des Cursors überwacht werden:

```
try (MongoChangeStreamCursor < ChangeStreamDocument < Document >> cursor = collection.watch().cursor()) {
    System.out.println(cursor.tryNext());
}
```

Es hat sich bewährt, entweder den [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoChangeStreamCursor.html#getResumeToken()](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/MongoChangeStreamCursor.html#getResumeToken())in einer try-with-resource Anweisung zu erstellen oder den Cursor manuell zu schließen. Beim Aufrufen der `cursor()` Methode on wird eine [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/ChangeStreamIterable.html#startAtOperationTime(org.bson.BsonTimestamp)](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/ChangeStreamIterable.html#startAtOperationTime(org.bson.BsonTimestamp))zurückgegeben`MongoChangeStreamCursor`, die über einem [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/changestream/ChangeStreamDocument.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/changestream/ChangeStreamDocument.html)Objekt erstellt wurde. 

Die [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/changestream/ChangeStreamDocument.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/changestream/ChangeStreamDocument.html)Klasse ist eine wichtige Komponente, die einzelne Änderungsereignisse im Stream darstellt. Sie enthält detaillierte Informationen zu jeder Änderung, einschließlich des Vorgangstyps (Einfügen, Aktualisieren, Löschen, Ersetzen), des Dokumentschlüssels, der Namespace-Informationen und des vollständigen Dokumentinhalts, sofern verfügbar. Die Klasse bietet Methoden für den Zugriff auf verschiedene Aspekte des Änderungsereignisses, z. B. `getOperationType()` für die Bestimmung der Art der Änderung, für den `getFullDocument()` Zugriff auf den vollständigen Status des Dokuments und `getDocumentKey()` für die Identifizierung des geänderten Dokuments.

Das [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/changestream/ChangeStreamDocument.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/changestream/ChangeStreamDocument.html)Objekt stellt zwei wichtige Informationen bereit: ein Wiederaufnahme-Token und die Uhrzeit des Änderungsereignisses.

Resume-Tokens und zeitbasierte Operationen in DocumentDB-Change-Streams bieten wichtige Mechanismen für die Aufrechterhaltung der Kontinuität und die Verwaltung des Zugriffs auf historische Daten. Ein Resume-Token ist eine eindeutige Kennung, die für jedes Änderungsereignis generiert wird. Sie dient als Lesezeichen, mit dem Anwendungen die Verarbeitung von Change-Streams nach Verbindungsabbrüchen oder Ausfällen an einem bestimmten Punkt wieder aufnehmen können. Wenn ein Change-Stream-Cursor erstellt wird, kann er über `resumeAfter()` diese Option ein zuvor gespeichertes Resume-Token verwenden, sodass der Stream dort weitergeführt werden kann, wo er aufgehört hat, anstatt am Anfang zu beginnen oder Ereignisse zu verlieren.

Zeitbasierte Operationen in Change-Streams bieten unterschiedliche Ansätze, um den Ausgangspunkt der Überwachung von Änderungsereignissen zu verwalten. Mit dieser `startAtOperationTime()` Option können Sie beginnen, Änderungen zu beobachten, die zu oder nach einem bestimmten Zeitstempel vorgenommen wurden. Diese zeitbasierten Funktionen sind besonders nützlich in Szenarien, in denen historische Daten verarbeitet, point-in-time wiederhergestellt oder zwischen Systemen synchronisiert werden müssen.

Im folgenden Codebeispiel wird das Ereignis abgerufen, das mit dem Einfügedokument verknüpft ist, dessen Resume-Token erfasst und dann dieses Token bereitgestellt, um mit der Überwachung auf Ereignisse nach dem Einfügeereignis zu beginnen. Das Ereignis wird dem Aktualisierungsereignis zugeordnet, ruft dann die Clusterzeit ab, zu der die Aktualisierung stattgefunden hat, und verwendet diesen Zeitstempel als Ausgangspunkt für die weitere Verarbeitung.

```
BsonDocument resumeToken;
BsonTimestamp resumeTime;

try (MongoChangeStreamCursor < ChangeStreamDocument < Document >> cursor = collection.watch().cursor()) {
    System.out.println("****************** Insert Document *******************");
    ChangeStreamDocument < Document > insertChange = cursor.tryNext();
    resumeToken = insertChange.getResumeToken();
    printJson(cursor.tryNext());
}
try (MongoChangeStreamCursor < ChangeStreamDocument < Document >> cursor = collection.watch()
    .resumeAfter(resumeToken)
    .cursor()) {
    System.out.println("****************** Update Document *******************");
    ChangeStreamDocument < Document > insertChange = cursor.tryNext();
    resumeTime = insertChange.getClusterTime();
    printJson(cursor.tryNext());
}
try (MongoChangeStreamCursor < ChangeStreamDocument < Document >> cursor = collection.watch()
    .startAtOperationTime(resumeTime)
    .cursor()) {
    System.out.println("****************** Delete Document *******************");
    printJson(cursor.tryNext());
  }
```

Standardmäßig umfasst das Aktualisierungsänderungsereignis nicht das gesamte Dokument und nur die vorgenommenen Änderungen. Wenn Sie auf das gesamte Dokument zugreifen müssen, das aktualisiert wurde, können Sie die `fullDocument()` Methode für das [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/ChangeStreamIterable.html#startAtOperationTime(org.bson.BsonTimestamp)](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-sync/com/mongodb/client/ChangeStreamIterable.html#startAtOperationTime(org.bson.BsonTimestamp))Objekt aufrufen. Denken Sie daran, dass, wenn Sie bei einem Aktualisierungsereignis die Rückgabe eines vollständigen Dokuments anfordern, das Dokument zurückgegeben wird, das zum Zeitpunkt des Aufrufs der Change-Streams vorhanden war.

Diese Methode verwendet eine [https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/changestream/FullDocument.html](https://mongodb.github.io/mongo-java-driver/5.3/apidocs/mongodb-driver-core/com/mongodb/client/model/changestream/FullDocument.html)Aufzählung als Parameter. Derzeit unterstützt Amazon DocumentDB nur DEFAULT und `UPDATE_LOOKUP` Werte. Der folgende Codeausschnitt zeigt, wie Sie das vollständige Dokument für Aktualisierungsereignisse anfordern, wenn Sie beginnen, nach Änderungen zu suchen:

```
try (MongoChangeStreamCursor < ChangeStreamDocument < Document >> cursor = collection.watch().fullDocument(FullDocument.UPDATE_LOOKUP).cursor())
```

# Verwenden der JSON-Schemavalidierung
<a name="json-schema-validation"></a>

Mithilfe des `$jsonSchema` Testabfrageoperators können Sie überprüfen, ob Dokumente in Ihre Sammlungen eingefügt werden.

**Topics**
+ [

## JSON-Schemavalidierung erstellen und verwenden
](#get-started-with-validation)
+ [

## Unterstützte Schlüsselwörter
](#json-supported-keywords)
+ [

## bypassDocumentValidation
](#json-schema-bypass)
+ [

## Einschränkungen
](#json-schema-limitations)

## JSON-Schemavalidierung erstellen und verwenden
<a name="get-started-with-validation"></a>

### Eine Sammlung mit Schemavalidierung erstellen
<a name="create-collection-with-validation"></a>

Sie können eine Sammlung mit `createCollection` Betriebs- und Validierungsregeln erstellen. Diese Validierungsregeln werden beim Einfügen oder Aktualisieren von Amazon DocumentDB DocumentDB-Dokumenten angewendet. Das folgende Codebeispiel zeigt Validierungsregeln für eine Sammlung von Mitarbeitern:

```
db.createCollection("employees", {
   "validator": {
      "$jsonSchema": {
         "bsonType": "object",
         "title": "employee validation",
         "required": [ "name", "employeeId"],
         "properties": {
            "name": {
                  "bsonType": "object",
                  "properties": {
                     "firstName": {
                        "bsonType": ["string"]
                     },
                     "lastName": {
                        "bsonType": ["string"]
                     }
                  },
                  "additionalProperties" : false 
            },
            "employeeId": {
               "bsonType": "string",
               "description": "Unique Identifier for employee"
            },
             "salary": {
               "bsonType": "double"
            },
            "age": {
               "bsonType": "number"
            }
         },
         "additionalProperties" : true 
      }
   },
   "validationLevel": "strict", "validationAction": "error"
} )
```

### Ein gültiges Dokument einfügen
<a name="insert-valid-document"></a>

Im folgenden Beispiel werden Dokumente eingefügt, die den oben genannten Schemavalidierungsregeln entsprechen:

```
db.employees.insert({"name" : { "firstName" : "Carol" , "lastName" : "Smith"}, "employeeId": "c720a" , "salary": 1000.0 })
db.employees.insert({ "name" : { "firstName" : "William", "lastName" : "Taylor" }, "employeeId" : "c721a", "age" : 24})
```

### Ein ungültiges Dokument wird eingefügt
<a name="insert-invalid-document"></a>

Im folgenden Beispiel werden Dokumente eingefügt, die den obigen Schemavalidierungsregeln nicht entsprechen. In diesem Beispiel ist der EmployeeID-Wert keine Zeichenfolge:

```
db.employees.insert({
    "name" : { "firstName" : "Carol" , "lastName" : "Smith"}, 
    "employeeId": 720 , 
    "salary": 1000.0 
})
```

Dieses Beispiel zeigt eine falsche Syntax innerhalb des Dokuments.

### Eine Sammlung ändern
<a name="modify-collection"></a>

Der `collMod` Befehl wird verwendet, um Validierungsregeln einer vorhandenen Sammlung hinzuzufügen oder zu ändern. Im folgenden Beispiel wird der Liste der erforderlichen Felder ein Gehaltsfeld hinzugefügt:

```
db.runCommand({"collMod" : "employees", 
   "validator": {
      "$jsonSchema": {
         "bsonType": "object",
         "title": "employee validation",
         "required": [ "name", "employeeId", "salary"],
         "properties": {
            "name": {
                  "bsonType": "object",
                  "properties": {
                     "firstName": {
                        "bsonType": ["string"]
                     },
                     "lastName": {
                        "bsonType": ["string"]
                     }
                  },
                  "additionalProperties" : false 
            },
            "employeeId": {
               "bsonType": "string",
               "description": "Unique Identifier for employee"
            },
             "salary": {
               "bsonType": "double"
            },
            "age": {
               "bsonType": "number"
            }
         },
         "additionalProperties" : true 
      }
   }
} )
```

### Adressierung von Dokumenten, die vor der Änderung der Validierungsregeln hinzugefügt wurden
<a name="pre-validation-docs"></a>

Verwenden Sie die folgenden `validationLevel` Modifikatoren, um Dokumente zu adressieren, die Ihrer Sammlung hinzugefügt wurden, bevor die Validierungsregeln geändert wurden:
+ **Strikt**: Wendet Validierungsregeln auf alle Einfügungen und Aktualisierungen an.
+ **moderat**: Wendet Validierungsregeln auf bestehende gültige Dokumente an. Bei Aktualisierungen werden vorhandene ungültige Dokumente nicht überprüft.

Im folgenden Beispiel ist nach der Aktualisierung der Validierungsregeln für die Sammlung mit dem Namen „Mitarbeiter“ das Feld Gehalt erforderlich. Die Aktualisierung des folgenden Dokuments schlägt fehl:

```
db.runCommand({ 
    update: "employees", 
    updates: [{ 
        q: { "employeeId": "c721a" }, 
        u: { age: 25 , salary : 1000}, 
        upsert: true }] 
})
```

Amazon DocumentDB gibt die folgende Ausgabe zurück:

```
{
"n" : 0,
    "nModified" : 0,
    "writeErrors" : [
        {
"index" : 0,
            "code" : 121,
            "errmsg" : "Document failed validation"
        }
    ],
    "ok" : 1,
    "operationTime" : Timestamp(1234567890, 1)
}
```

Wenn Sie die Validierungsstufe `moderate` auf aktualisieren, kann das obige Dokument erfolgreich aktualisiert werden:

```
db.runCommand({
    "collMod" : "employees", 
    validationLevel : "moderate"
})

db.runCommand({ 
    update: "employees", 
    updates: [{ 
        q: { "employeeId": "c721a" }, 
        u: { age: 25 , salary : 1000}, 
        upsert: true }]
})
```

Amazon DocumentDB gibt die folgende Ausgabe zurück:

```
{
"n" : 1,
    "nModified" : 1,
    "ok" : 1,
    "operationTime" : Timestamp(1234567890, 1)
}
```

### Dokumente werden mit dem \$1JsonSchema abgerufen
<a name="json-retrieve-docs"></a>

Der `$jsonSchema` Operator kann als Filter verwendet werden, um Dokumente abzufragen, die dem JSON-Schema entsprechen. Dies ist ein Operator der obersten Ebene, der in Filterdokumenten als Feld der obersten Ebene vorhanden sein oder mit Abfrageoperatoren wie `$and``$or`, und `$nor` verwendet werden kann. Die folgenden Beispiele zeigen die Verwendung von \$1jsonSchema als Einzelfilter und mit anderen Filteroperatoren:

Dokument, das in eine Sammlung „Mitarbeiter“ eingefügt wurde:

```
{ "name" : { "firstName" : "Carol", "lastName" : "Smith" }, "employeeId" : "c720a", "salary" : 1000 }
{ "name" : { "firstName" : "Emily", "lastName" : "Brown" }, "employeeId" : "c720b", "age" : 25, "salary" : 1050.2 }
{ "name" : { "firstName" : "William", "lastName" : "Taylor" }, "employeeId" : "c721a", "age" : 24, "salary" : 1400.5 }
{ "name" : { "firstName" : "Jane", "lastName" : "Doe" }, "employeeId" : "c721a", "salary" : 1300 }
```

Sammlung wurde nur mit dem `$jsonSchema` Operator gefiltert:

```
db.employees.find({ 
       $jsonSchema: { required: ["age"] } })
```

Amazon DocumentDB gibt die folgende Ausgabe zurück:

```
{ "_id" : ObjectId("64e5f91c6218c620cf0e8f8b"), "name" : { "firstName" : "Emily", "lastName" : "Brown" }, "employeeId" : "c720b", "age" : 25, "salary" : 1050.2 }
{ "_id" : ObjectId("64e5f94e6218c620cf0e8f8c"), "name" : { "firstName" : "William", "lastName" : "Taylor" }, "employeeId" : "c721a", "age" : 24, "salary" : 1400.5 }
```

Sammlung, die mit dem `$jsonSchema` Operator und einem anderen Operator gefiltert wurde:

```
db.employees.find({ 
       $or: [{ $jsonSchema: { required: ["age", "name"]}}, 
            { salary: { $lte:1000}}]});
```

Amazon DocumentDB gibt die folgende Ausgabe zurück:

```
{ "_id" : ObjectId("64e5f8886218c620cf0e8f8a"), "name" : { "firstName" : "Carol", "lastName" : "Smith" }, "employeeId" : "c720a", "salary" : 1000 }
{ "_id" : ObjectId("64e5f91c6218c620cf0e8f8b"), "name" : { "firstName" : "Emily", "lastName" : "Brown" }, "employeeId" : "c720b", "age" : 25, "salary" : 1050.2 }
{ "_id" : ObjectId("64e5f94e6218c620cf0e8f8c"), "name" : { "firstName" : "William", "lastName" : "Taylor" }, "employeeId" : "c721a", "age" : 24, "salary" : 1400.5 }
```

Sammlung, die mit dem `$jsonSchema` Operator und mit dem Aggregatfilter `$match` gefiltert wurde:

```
db.employees.aggregate(
    [{ $match: { 
        $jsonSchema: { 
            required: ["name", "employeeId"],  
            properties: {"salary" :{"bsonType": "double"}}
        }
       }
    }]
)
```

Amazon DocumentDB gibt die folgende Ausgabe zurück:

```
{ 
"_id" : ObjectId("64e5f8886218c620cf0e8f8a"),
 "name" : { "firstName" : "Carol", "lastName" : "Smith" },
"employeeId" : "c720a",
"salary" : 1000 
}
{
"_id" : ObjectId("64e5f91c6218c620cf0e8f8b"),
"name" : { "firstName" : "Emily", "lastName" : "Brown" },
"employeeId" : "c720b",
"age" : 25,
"salary" : 1050.2
}
{
"_id" : ObjectId("64e5f94e6218c620cf0e8f8c"),
"name" : { "firstName" : "William", "lastName" : "Taylor" },
"employeeId" : "c721a",
"age" : 24,
"salary" : 1400.5
}
{
"_id" : ObjectId("64e5f9786218c620cf0e8f8d"),
"name" : { "firstName" : "Jane", "lastName" : "Doe" },
"employeeId" : "c721a",
"salary" : 1300
}
```

### Bestehende Validierungsregeln anzeigen
<a name="view-validation-rules"></a>

Um die vorhandenen Validierungsregeln für eine Sammlung zu sehen, verwenden Sie:

```
db.runCommand({
    listCollections: 1, 
    filter: { name: 'employees' }
})
```

Amazon DocumentDB gibt die folgende Ausgabe zurück:

```
{
    "waitedMS" : NumberLong(0),
    "cursor" : {
        "firstBatch" : [
            {
                "name" : "employees",
                "type" : "collection",
                "options" : {
                    "autoIndexId" : true,
                    "capped" : false,
                    "validator" : {
                        "$jsonSchema" : {
                            "bsonType" : "object",
                            "title" : "employee validation",
                            "required" : [
                                "name",
                                "employeeId",
                                "salary"
                            ],
                            "properties" : {
                                "name" : {
                                    "bsonType" : "object",
                                    "properties" : {
                                        "firstName" : {
                                            "bsonType" : [
                                                "string"
                                            ]
                                        },
                                        "lastName" : {
                                            "bsonType" : [
                                                "string"
                                            ]
                                        }
                                    },
                                    "additionalProperties" : false
                                },
                                "employeeId" : {
                                    "bsonType" : "string",
                                    "description" : "Unique Identifier for employee"
                                },
                                "salary" : {
                                    "bsonType" : "double"
                                },
                                "age" : {
                                    "bsonType" : "number"
                                }
                            },
                            "additionalProperties" : true
                        }
                    },
                    "validationLevel" : "moderate",
                    "validationAction" : "error"
                },
                "info" : {
                    "readOnly" : false
                },
                "idIndex" : {
                    "v" : 2,
                    "key" : {
                        "_id" : 1
                    },
                    "name" : "_id_",
                    "ns" : "test.employees"
                }
            }
        ],
        "id" : NumberLong(0),
        "ns" : "test.$cmd.listCollections"
    },
    "ok" : 1,
    "operationTime" : Timestamp(1692788937, 1)
}
```

Amazon DocumentDB behält auch die Validierungsregeln in der `$out` Aggregationsphase bei.

## Unterstützte Schlüsselwörter
<a name="json-supported-keywords"></a>

Die folgenden Felder werden in den `collMod` Befehlen `create` und unterstützt:
+ **`Validator`**— Unterstützt den `$jsonSchem` Operator a.
+ **`ValidationLevel`**— Unterstützt `moderate` Werte `off``strict`, und.
+ **`ValidationAction`**— Unterstützt den `error` Wert.

Der \$1jsonSchema-Operator unterstützt die folgenden Schlüsselwörter:
+ `additionalItems`
+ `additionalProperties`
+ `allOf`
+ `anyOf`
+ `bsonType`
+ `dependencies`
+ `description`
+ `enum`
+ `exclusiveMaximum`
+ `exclusiveMinimum`
+ `items`
+ `maximum`
+ `minimum`
+ `maxItems`
+ `minItems`
+ `maxLength`
+ `minLength`
+ `maxProperties`
+ `minProperties`
+ `multipleOf`
+ `not`
+ `oneOf`
+ `pattern`
+ `patternProperties`
+ `properties`
+ `required`
+ `title`
+ `type`
+ `uniqueItems`

## bypassDocumentValidation
<a name="json-schema-bypass"></a>

Amazon DocumentDB unterstützt `bypassDocumentValidation` die folgenden Befehle und Methoden:
+ `insert`
+ `update`
+ `findAndModify`
+ `$out`Stufe im `aggregate` Befehl und in der Methode `db.collection.aggregate()`

Amazon DocumentDB unterstützt die folgenden Befehle nicht für`bypassDocumentValidation`: 
+ `$merge`im `aggregate` Befehl und in der Methode `db.collection.aggregate()`
+ `mapReduce`Befehl und `db.collection.mapReduce()` Methode
+ `applyOps` command

## Einschränkungen
<a name="json-schema-limitations"></a>

Für die `$jsonSchema` Validierung gelten die folgenden Einschränkungen:
+ Amazon DocumentDB gibt den Fehler „Dokument konnte nicht validiert werden“ zurück, wenn ein Vorgang die Validierungsregel nicht erfüllt.
+ Elastische Amazon DocumentDB-Cluster werden nicht unterstützt`$jsonSchema`.