

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用亚马逊 DocumentDB（兼容 MongoDB）作为来源 AWS DMS
<a name="CHAP_Source.DocumentDB"></a>

有关 AWS DMS 支持将哪些版本的 Amazon DocumentDB（与 MongoDB 兼容）作为源的信息，请参阅 [的来源 AWS DMS](CHAP_Introduction.Sources.md)。

 使用 Amazon DocumentDB 作为源，您可以将数据从一个 Amazon DocumentDB 集群迁移到另一个 Amazon DocumentDB 集群。您也可以将数据从 Amazon DocumentDB 集群迁移到支持的其他目标终端节点之一。 AWS DMS

如果您不熟悉 Amazon DocumentDB，请注意 Amazon DocumentDB 的以下重要概念：
+ Amazon DocumentDB 中的记录是一个*文档*，它是由字段和值对构成的数据结构。字段值可以包含其他文档、数组和文档数组。文档大致相当于关系数据库表中的行。
+ Amazon DocumentDB 中的*集合*是一组文档，并且大致相当于关系数据库表。
+ Amazon DocumentDB 中的*数据库*是一组集合，并且大致相当于关系数据库中的架构。

AWS DMS 使用 Amazon DocumentDB 作为源代码时，支持两种迁移模式：文档模式和表格模式。在 AWS DMS 控制台中创建 Amazon DocumentDB 源终端节点时，您可以使用**元数据模式**选项或额外连接属性来指定迁移模式。`nestingLevel`在下文中，您可以找到有关迁移模式的选择如何影响所生成的目标数据格式的说明。

**文档模式**  
在*文档模式下*，JSON 文档按原样迁移。这意味着文档数据将合并到两个项目之一中。当您使用关系数据库作为目标时，数据是目标表中名为 `_doc` 的单个列。当您使用非关系数据库作为目标时，数据是单个 JSON 文档。默认模式为文档模式，我们建议在迁移到 Amazon DocumentDB 目标时使用这种模式。  
例如，请考虑名为 `myCollection` 的 Amazon DocumentDB 集合中的以下文档。  

```
 db.myCollection.find()
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe0"), "a" : 1, "b" : 2, "c" : 3 }
{ "_id" : ObjectId("5a94815f40bd44d1b02bdfe1"), "a" : 4, "b" : 5, "c" : 6 }
```
在使用文档模式将数据迁移到关系数据库表后，数据结构如下所示。文档中的数据字段将整合到 ` _doc` 列中。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Source.DocumentDB.html)
您可以选择将额外连接属性 `extractDocID` 设置为 `true`，以创建第二个名为 `"_id"` 的列作为主键。如果您要使用更改数据捕获（CDC），请将此参数设置为 `true`，除非使用 Amazon DocumentDB 作为目标。  
对生成[多文档交易](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction)的来源使用 CDC 时，**必须**将`ExtractDocId`参数设置为。`true`如果未启用此参数，则 AWS DMS 任务在遇到多文档事务时将失败。  
如果向源数据库添加新集合，则会为该集合 AWS DMS 创建一个新的目标表并复制所有文档。

**表模式**  
在*表模式*中，AWS DMS 将 Amazon DocumentDB 文档中的每个顶级字段转换为目标表中的一个列。如果字段是嵌套的，则将嵌套值 AWS DMS 展平为一列。 AWS DMS 然后将关键字段和数据类型添加到目标表的列集中。  
对于每个 Amazon DocumentDB 文档， AWS DMS 将每个键和类型添加到目标表的列集中。例如，使用表格模式，将前面的示例 AWS DMS 迁移到下表中。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Source.DocumentDB.html)
嵌套值平展到包含键名 (以句点分隔) 的列中。该列通过联接平展字段名（由句点分隔）来命名。例如， AWS DMS 将包含嵌套值字段（例如嵌套值）的 JSON 文档迁移`{"a" : {"b" : {"c": 1}}}`到名为的列中 `a.b.c.`  
要创建目标列，请 AWS DMS 扫描指定数量的 Amazon DocumentDB 文档，然后创建一组包含所有字段及其类型。 AWS DMS 然后使用此集合来创建目标表的列。如果您使用控制台创建或修改 Amazon DocumentDB 源端点，则可指定要扫描的文档的数量。默认值为 1000 个文档。如果使用 AWS CLI，则可以使用额外的连接属性`docsToInvestigate`。  
在表格模式下，像这样 AWS DMS 管理文档和集合：  
+ 当您将一个文档添加到现有集合时，将复制该文档。如果某些字段在目标中不存在，则不会复制这些字段。
+ 当您更新文档时，复制更新后的文档。如果某些字段在目标中不存在，则不会复制这些字段。
+ 完全支持文档删除。
+ 在 CDC 任务期间，添加新集合不会导致在目标上生成新的表。
+ 在更改数据捕获 (CDC) 阶段， AWS DMS 不支持重命名集合。

**Topics**
+ [设置权限以使用 Amazon DocumentDB 作为源](#CHAP_Source.DocumentDB.Permissions)
+ [为 Amazon DocumentDB 集群配置 CDC](#CHAP_Source.DocumentDB.ConfigureCDC)
+ [使用 TLS 连接到 Amazon DocumentDB](#CHAP_Source.DocumentDB.TLS)
+ [创建 Amazon DocumentDB 源端点](#CHAP_Source.DocumentDB.ConfigureEndpoint)
+ [对 Amazon DocumentDB 集合进行分段并以并行方式迁移](#CHAP_Source.DocumentDB.ParallelLoad)
+ [使用 Amazon DocumentDB 作为源时迁移多个数据库 AWS DMS](#CHAP_Source.DocumentDB.Multidatabase)
+ [使用亚马逊 DocumentDB 作为来源时的限制 AWS DMS](#CHAP_Source.DocumentDB.Limitations)
+ [在以 Amazon DocumentDB 为源时使用端点设置](#CHAP_Source.DocumentDB.ECAs)
+ [Amazon DocumentDB 的源数据类型](#CHAP_Source.DocumentDB.DataTypes)

## 设置权限以使用 Amazon DocumentDB 作为源
<a name="CHAP_Source.DocumentDB.Permissions"></a>

使用 Amazon DocumentDB 源代码进行 AWS DMS 迁移时，您可以创建具有根权限的用户账户。或者，您可以创建一个仅具有待迁移数据库权限的用户。

以下代码创建作为根账户的用户。

```
use admin
db.createUser(
  {
    user: "root",
    pwd: "password",
    roles: [ { role: "root", db: "admin" } ]
  })
```

对于 Amazon DocumentDB 3.6，以下代码创建在要迁移的数据库上具有最低权限的用户。

```
use db_name
db.createUser( 
    {
        user: "dms-user",
        pwd: "password",
        roles: [{ role: "read", db: "db_name" }]
    }
)
```

对于 Amazon DocumentDB 4.0 及更高版本， AWS DMS 使用部署范围内的更改流。此处，以下代码创建具有最小权限的用户。

```
db.createUser( 
{ 
    user: "dms-user",
    pwd: "password",
    roles: [ { role: "readAnyDatabase", db: "admin" }] 
})
```

## 为 Amazon DocumentDB 集群配置 CDC
<a name="CHAP_Source.DocumentDB.ConfigureCDC"></a>

要将持续复制或 CDC 与 Amazon DocumentDB 配合使用， AWS DMS 需要访问亚马逊文档数据库集群的变更流。有关集群的集合和数据库中按时间排列的更新事件序列的描述，请参阅**《Amazon DocumentDB 开发人员指南》中的[使用更改流](https://docs.aws.amazon.com/documentdb/latest/developerguide/change_streams.html)。

使用 MongoDB Shell 对您的 Amazon DocumentDB 集群进行身份验证。然后运行以下命令以启用更改流。

```
db.adminCommand({modifyChangeStreams: 1,
    database: "DB_NAME",
    collection: "", 
    enable: true});
```

这种方法可以为您数据库中的所有集合启用更改流。启用更改流后，您可以创建迁移任务来迁移现有数据，同时复制正在进行的更改。 AWS DMS 即使加载了批量数据，仍会继续捕获和应用更改。最终，源数据库和目标数据库将保持同步，尽可能减少迁移的停机时间。

**注意**  
AWS DMS 使用操作日志 (oplog) 捕获正在进行的复制期间的更改。如果 Amazon DocumentDB 在 AWS DMS 读取操作日志之前将其从操作日志中清除，则您的任务将失败。我们建议调整 oplog 的大小，将更改至少保留 24 小时。

## 使用 TLS 连接到 Amazon DocumentDB
<a name="CHAP_Source.DocumentDB.TLS"></a>

默认情况下，新创建的 Amazon DocumentDB 集群仅接受使用传输层安全性协议（TLS）的安全连接。当 TLS 启用时，每个到 Amazon DocumentDB 的连接都需要公有密钥。

您可以通过`rds-combined-ca-bundle.pem`从托管的 Amazon AWS S3 存储桶下载文件来检索 Amazon DocumentDB 的公钥。有关下载此文件的更多信息，请参阅**《Amazon DocumentDB 开发人员指南》中的[使用 TLS 加密连接](https://docs.aws.amazon.com/documentdb/latest/developerguide/security.encryption.ssl.html)。

下载`rds-combined-ca-bundle.pem`文件后，可以将其包含的公钥导入到 AWS DMS。以下步骤说明了如何完成此操作。

**使用 AWS DMS 控制台导入您的公钥**

1. 登录 AWS 管理控制台 并选择 AWS DMS。

1. 在导航窗格中，选择**证书**。

1. 选择**导入证书**。此时显示**导入新 CA 证书**页面。

1. 在**证书配置**部分中，执行下列操作之一：
   + 对于**证书标识符**，请输入证书的唯一名称，例如 `docdb-cert`。
   + 选择**选择文件**，导航到您保存 `rds-combined-ca-bundle.pem` 文件的位置，然后选择该文件。

1. 选择 **Add new CA certificate (添加新 CA 证书)**。

 AWS CLI 以下示例使用 AWS DMS `import-certificate`命令导入公钥`rds-combined-ca-bundle.pem`文件。

```
aws dms import-certificate \
    --certificate-identifier docdb-cert \
    --certificate-pem file://./rds-combined-ca-bundle.pem
```

## 创建 Amazon DocumentDB 源端点
<a name="CHAP_Source.DocumentDB.ConfigureEndpoint"></a>

您可以使用控制台或 AWS CLI创建 Amazon DocumentDB 源端点。通过控制台使用以下过程。

**使用控制台配置 Amazon DocumentDB 源终端节点 AWS DMS**

1. 登录 AWS 管理控制台 并选择 AWS DMS。

1. 在导航窗格中，选择**端点**，然后选择**创建端点**。

1. 对于**端点标识符**，请提供一个可以帮助您轻松识别端点的名称，例如 `docdb-source`。

1. 对于**源引擎**，请选择 **Amazon DocumentDB（与 MongoDB 兼容）**。

1. 对于**服务器名称**，请输入您的 Amazon DocumentDB 数据库端点所在的服务器的名称。例如，您可以输入 Amazon EC2 实例的公有 DNS 名称，如 `democluster.cluster-cjf6q8nxfefi.us-east-2.docdb.amazonaws.com`。

1. 对于**端口**，输入 27017。

1. 对于 **SSL mode (SSL 模式)**，请选择 **verify-full**。如果您已经在 Amazon DocumentDB 集群上禁用 SSL，则可以跳过此步骤。

1. 对于 **CA 证书**，请选择 Amazon DocumentDB 证书 `rds-combined-ca-bundle.pem`。有关添加此证书的说明，请参阅[使用 TLS 连接到 Amazon DocumentDB](#CHAP_Source.DocumentDB.TLS)。

1. 对于**数据库名称**，请输入要迁移的数据库的名称。

通过 CLI 使用以下过程。

**使用配置亚马逊文档数据库源终端节点 AWS CLI**
+ 运行以下 AWS DMS `create-endpoint`命令来配置 Amazon DocumentDB 源终端节点，使用您自己的值替换占位符。

  ```
  aws dms create-endpoint \
             --endpoint-identifier a_memorable_name \
             --endpoint-type source \
             --engine-name docdb \
             --username value \
             --password value \
             --server-name servername_where_database_endpoint_resides \
             --port 27017 \
             --database-name name_of_endpoint_database
  ```

## 对 Amazon DocumentDB 集合进行分段并以并行方式迁移
<a name="CHAP_Source.DocumentDB.ParallelLoad"></a>

为了提高迁移任务的性能，Amazon DocumentDB 源端点支持表映射中的并行完全加载功能的两个选项。换句话说，在 JSON 设置中，对于并行完全加载，您可以使用表映射的自动分段或范围分段选项来迁移集合。自动分段选项允许您指定在每个话题中自动分段源 AWS DMS 以进行迁移的标准。范围分割选项允许您告知 DMS 要 AWS DMS 在每个线程中迁移的每个分段的具体范围。有关这些设置的更多信息，请参阅[表和集合设置规则和操作](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md)。

### 使用自动分段范围并行迁移 Amazon DocumentDB 数据库
<a name="CHAP_Source.DocumentDB.ParallelLoad.AutoPartitioned"></a>

您可以并行迁移文档，方法是为 AWS DMS 指定标准，以便按照每个线程要迁移的文档数量，为每个线程自动分区（分段）数据。使用这种方法， AWS DMS 尝试优化区段边界，以最大限度地提高每个线程的性能。

您可以在表映射中使用以下表设置选项来指定分段标准：


|  表设置选项  |  说明  | 
| --- | --- | 
|  `"type"`  |  （必需）对于将 Amazon DocumentDB 作为源，设置为 `"partitions-auto"`。  | 
|  `"number-of-partitions"`  |  （可选）迁移使用的分区（区段）总数。默认值是 16。  | 
|  `"collection-count-from-metadata"`  |  （可选）如果设置为`true`，则 AWS DMS 使用估计的收集计数来确定分区数。如果设置为`false`，则 AWS DMS 使用实际收集次数。默认值为 `true`。  | 
|  `"max-records-skip-per-page"`  |  （可选）在确定每个分区的边界时要同时跳过的记录数。 AWS DMS 使用分页跳过方法来确定分区的最小边界。默认值是 10000。设置一个相对较大的值，可能会导致游标超时和任务失败。设置一个相对较低的值，会导致每页的操作次数增加，完全加载速度降低。  | 
|  `"batch-size"`  |  （可选）限制一个批处理返回的文档数量。每个批处理需要往返一次服务器。如果批处理大小为零（0），则游标使用服务器定义的最大批处理大小。默认值是 0。  | 

以下示例显示了自动分段的表映射。

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "rule-action": "include",
            "filters": []
        },
        {
            "rule-type": "table-settings",
            "rule-id": "2",
            "rule-name": "2",
            "object-locator": {
                "schema-name": "admin",
                "table-name": "departments"
            },
            "parallel-load": {
                "type": "partitions-auto",
                "number-of-partitions": 5,
                "collection-count-from-metadata": "true",
                "max-records-skip-per-page": 1000000,
                "batch-size": 50000
            }
        }
    ]
}
```

自动分段有以下限制。每个区段的迁移分别提取集合计数和集合的最小 `_id`。然后，它使用分页跳过来计算该区段的最小边界。因此，请确保每个集合的最小 `_id` 值保持不变，直到计算出集合中的所有区段边界。如果在区段边界计算期间更改集合的最小 `_id` 值，则可能会导致数据丢失或重复行错误。

### 使用特定区段范围并行迁移 Amazon DocumentDB 数据库
<a name="CHAP_Source.DocumentDB.ParallelLoad.Ranges"></a>

以下示例显示了包含七个项目并将 `_id` 作为主键的 Amazon DocumentDB 集合。

![\[包含七个项目的 Amazon DocumentDB 集合。\]](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/images/datarep-docdb-collection.png)


要将集合拆分为三个区段以并行迁移，可以在迁移任务中添加表映射规则，如以下 JSON 示例所示。

```
{ // Task table mappings:
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "1",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "rule-action": "include"
    }, // "selection" :"rule-type"
    {
      "rule-type": "table-settings",
      "rule-id": "2",
      "rule-name": "2",
      "object-locator": {
        "schema-name": "testdatabase",
        "table-name": "testtable"
      },
      "parallel-load": {
        "type": "ranges",
        "columns": [
           "_id",
           "num"
        ],
        "boundaries": [
          // First segment selects documents with _id less-than-or-equal-to 5f805c97873173399a278d79
          // and num less-than-or-equal-to 2.
          [
             "5f805c97873173399a278d79",
             "2"
          ],
          // Second segment selects documents with _id > 5f805c97873173399a278d79 and
          // _id less-than-or-equal-to 5f805cc5873173399a278d7c and
          // num > 2 and num less-than-or-equal-to 5.
          [
             "5f805cc5873173399a278d7c",
             "5"
          ]                                   
          // Third segment is implied and selects documents with _id > 5f805cc5873173399a278d7c.
        ] // :"boundaries"
      } // :"parallel-load"
    } // "table-settings" :"rule-type"
  ] // :"rules"
} // :Task table mappings
```

该表映射定义将源集合拆分为三个区段以并行迁移。以下是分段边界。

```
Data with _id less-than-or-equal-to "5f805c97873173399a278d79" and num less-than-or-equal-to 2 (2 records)
Data with _id less-than-or-equal-to "5f805cc5873173399a278d7c" and num less-than-or-equal-to 5 and not in (_id less-than-or-equal-to  "5f805c97873173399a278d79" and num less-than-or-equal-to 2) (3 records)
Data not in (_id less-than-or-equal-to "5f805cc5873173399a278d7c" and num less-than-or-equal-to 5) (2 records)
```

迁移任务完成后，您可以从任务日志中验证表是否并行加载，如以下示例所示。您还可以验证用于从源表中卸载每个区段的 Amazon DocumentDB `find` 子句。

```
[TASK_MANAGER    ] I:  Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86  (replicationtask_util.c:752)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is initialized.   (mongodb_unload.c:157)

[SOURCE_UNLOAD   ] I:  Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } }  (mongodb_unload.c:328)

[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TASK_MANAGER    ] I: Start loading segment #1 of 3 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. Start load timestamp 0005B191D638FE86 (replicationtask_util.c:752)
 
[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is initialized. (mongodb_unload.c:157) 

[SOURCE_UNLOAD   ] I: Range Segmentation filter for Segment #0 is: { "_id" : { "$lte" : { "$oid" : "5f805c97873173399a278d79" } }, "num" : { "$lte" : { "$numberInt" : "2" } } } (mongodb_unload.c:328)
 
[SOURCE_UNLOAD   ] I: Unload finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 2 rows sent.

[TARGET_LOAD     ] I: Load finished for segment #1 of segmented table 'testdatabase'.'testtable' (Id = 1). 1 rows received. 0 rows skipped. Volume transfered 480.

[TASK_MANAGER    ] I: Load finished for segment #1 of table 'testdatabase'.'testtable' (Id = 1) by subtask 1. 2 records transferred.
```

目前， AWS DMS 支持以下 Amazon DocumentDB 数据类型作为区段键列：
+ 双精度
+ String
+ ObjectId
+ 32 位整数
+ 64 位整数

## 使用 Amazon DocumentDB 作为源时迁移多个数据库 AWS DMS
<a name="CHAP_Source.DocumentDB.Multidatabase"></a>

AWS DMS 3.4.5 及更高版本仅支持在单个任务中迁移多个数据库，仅适用于 Amazon DocumentDB 版本 4.0 及更高版本。如果要迁移多个数据库，请执行以下操作：

1. 创建 Amazon DocumentDB 源端点时：
   + 在 f AWS 管理控制台 or 中 AWS DMS，将**创建**终端节点页面上的 “**端点配置**” 下的**数据库名称**留空。
   + 在 AWS Command Line Interface (AWS CLI) 中，为 D **oc DBSettings** umen **DatabaseName**t 中为**CreateEndpoint**操作指定的参数分配一个空字符串值。

1. 对于要从此 Amazon DocumentDB 源端点迁移的每个数据库，使用控制台中的指导式输入或直接以 JSON 格式输入，将每个数据库的名称指定为任务的表映射中的架构名称。有关指导式输入的更多信息，请参阅[通过控制台指定表选择和转换规则](CHAP_Tasks.CustomizingTasks.TableMapping.Console.md)中的描述。有关 JSON 的更多信息，请参阅[选择规则和操作](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Selections.md)。

例如，您可以指定以下 JSON 以迁移三个 Amazon DocumentDB 数据库。

**Example 迁移架构中的所有表**  
以下 JSON 会将源端点中 `Customers`、`Orders` 和 `Suppliers` 数据库的所有表迁移到目标端点。  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "Customers",
                "table-name": "%"
            },
            "object-locator": {
                "schema-name": "Orders",
                "table-name": "%"
            },
            "object-locator": {
                "schema-name": "Inventory",
                "table-name": "%"
            },
            "rule-action": "include"
        }
    ]
}
```

## 使用亚马逊 DocumentDB 作为来源时的限制 AWS DMS
<a name="CHAP_Source.DocumentDB.Limitations"></a>

以下是使用亚马逊 DocumentDB 作为来源时的限制： AWS DMS
+ 当 `_id` 选项设置为单独一列时，ID 字符串不能超过 200 个字符。
+ 在表模式下，对象 ID 和数组类型键将转换为具有 `oid` 和 `array` 前缀的列。

  将使用具有前缀的名称在内部引用这些列。如果您在引用这些列 AWS DMS 时使用转换规则，请务必指定前缀列。例如，指定 `${oid__id}` 而不是 `${_id}`，或者指定 `${array__addresses}` 而不是 `${_addresses}`。
+  集合名称和键名不能包含美元符号（\$1）。
+ 表模式和文档模式具有前面讨论的限制。
+ 使用自动分段进行并行迁移时，存在上述限制。
+ Amazon DocumentDB（兼容 MongoDB）源不支持使用特定的时间戳作为更改数据捕获（CDC）的起始位置。无论时间戳如何，持续复制任务都会开始捕获更改。
+ AWS DMS 对于低于 3.5.2 的 AWS DMS 版本，不支持嵌套级别大于 97 的文档。
+ DocumentDB 不支持源筛选器。
+ AWS DMS 在弹性集群模式下，不支持 DocumentDB 的 CDC（更改数据捕获）复制作为源。

## 在以 Amazon DocumentDB 为源时使用端点设置
<a name="CHAP_Source.DocumentDB.ECAs"></a>

您可以使用端点设置来配置 Amazon DocumentDB 源数据库，这与使用额外连接属性类似。您可以在使用 AWS DMS 控制台创建源端点时指定设置，或者使用中带有 `--doc-db-settings '{"EndpointSetting": "value", ...}'` JSON 语法的`create-endpoint`[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)命令来指定设置。

下表显示了在将 Amazon DocumentDB 用作源时可以使用的端点设置。


| 属性名称 | 有效值 | 默认值和描述 | 
| --- | --- | --- | 
|   `NestingLevel`   |  `"none"` `"one"`  |  `"none"` – 指定 `"none"` 以使用文档模式。指定 `"one"` 使用表模式。  | 
|   `ExtractDocID`   |  `true` `false`  |  `false` – 当 `NestingLevel` 设为 `"none"` 时使用此属性。 对生成[多文档交易](https://www.mongodb.com/docs/manual/reference/method/Session.startTransaction/#mongodb-method-Session.startTransaction)的来源使用 CDC 时，**必须**将`ExtractDocId`参数设置为。`true`如果未启用此参数，则 AWS DMS 任务在遇到多文档事务时将失败。  | 
|   `DocsToInvestigate`   |  大于 `0` 的正整数。  |  `1000` – 当 `NestingLevel` 设为 `"one"` 时使用此属性。  | 
|   `ReplicateShardCollections `   |  `true` `false`  |  如果为 true， AWS DMS 则将数据复制到分片集合。 AWS DMS 仅当目标终端节点是 DocumentDB 弹性集群时才使用此设置。 当此项设置为 true 时，请注意以下几点： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Source.DocumentDB.html)  | 

## Amazon DocumentDB 的源数据类型
<a name="CHAP_Source.DocumentDB.DataTypes"></a>

在下表中，您可以找到使用 AWS DMS时支持的 Amazon DocumentDB 源数据类型。您还可以在此表中找到 AWS DMS 数据类型的默认映射。有关数据类型的更多信息，请参阅 MongoDB 文档中的 [BSON 类型](https://docs.mongodb.com/manual/reference/bson-types)。

有关如何查看目标中映射的数据类型的信息，请参阅有关所使用的目标终端节点的部分。

有关 AWS DMS 数据类型的更多信息，请参见[AWS Database Migration Service 的数据类型](CHAP_Reference.DataTypes.md)。


|  Amazon DocumentDB 数据类型  |  AWS DMS 数据类型  | 
| --- | --- | 
| 布尔值 | 布尔型 | 
| 二元 | BLOB | 
| 日期 | 日期 | 
| 时间戳 | 日期 | 
| Int | INT4 | 
| 长整型 | INT8 | 
| 双精度 | REAL8 | 
| 字符串 (UTF-8) | CLOB | 
| 数组 | CLOB | 
| OID | 字符串 | 