

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

# 使用 MongoDB 作为来源 AWS DMS
<a name="CHAP_Source.MongoDB"></a>

 有关支持作为源的 MongoDB 版本的信息 AWS DMS ，请参阅。[的来源 AWS DMS](CHAP_Introduction.Sources.md)

请注意以下有关 MongoDB 版本支持的信息：
+  AWS DMS 3.4.5 及更高版本支持 MongoDB 版本 4.2 和 4.4。
+  AWS DMS 3.4.5 及更高版本以及 MongoDB 4.2 及更高版本支持分布式事务。有关 MongoDB 分布式事务的更多信息，请参阅 [MongoDB 文档](https://www.mongodb.com/docs/)中的[事务](https://docs.mongodb.com/manual/core/transactions/)。
+  AWS DMS 3.5.0 及更高版本不支持 3.6 之前的 MongoDB 版本。
+  AWS DMS 3.5.1 及更高版本支持 MongoDB 版本 5.0。
+  AWS DMS 3.5.2 及更高版本支持 MongoDB 版本 6.0。
+  AWS DMS 3.5.4 及更高版本支持 MongoDB 版本 7.0 和 8.0。



如果您是初次使用 MongoDB，请注意以下关于 MongoDB 数据库的重要概念：
+ MongoDB 中的记录是一个*文档*，它是由字段和值对构成的数据结构。字段值可以包含其他文档、数组和文档数组。文档大致相当于关系数据库表中的行。
+ MongoDB 中的*集合* 是一组文档，并且大致相当于关系数据库表。
+ MongoDB 中的*数据库*是一组集合，并且大致相当于关系数据库中的架构。
+ 在内部，MongoDB 文档以压缩格式存储为二进制 JSON (BSON) 文件，包含文档中每个字段的类型。每个文档都有唯一的 ID。

AWS DMS *使用 MongoDB 作为源代码时支持两种迁移模式：*文档模式或表格*模式。*您可以在创建 MongoDB 端点时指定要使用的迁移模式，或者通过从 AWS DMS 控制台设置**元数据模式**参数来指定。或者，您可以创建名为 `_id` 的第二列，通过在端点配置面板中选中**将 \$1id 作为单独的列**复选标记，将其作为主键。

您选择的迁移模式将影响目标数据的结果格式，如下所述。

**文档模式**  
在文档模式下，MongoDB 文档按“原样”迁移，这意味着文档数据将并入目标表中一个名为 `_doc` 的列中。文档模式是您将 MongoDB 作为源终端节点时的默认设置。  
例如，请考虑名为 myCollection 的 MongoDB 集合中的以下文档。  

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

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

**Topics**
+ [使用 MongoDB 作为源时所需的权限 AWS DMS](#CHAP_Source.MongoDB.PrerequisitesCDC)
+ [为 CDC 配置 MongoDB 副本集](#CHAP_Source.MongoDB.PrerequisitesCDC.ReplicaSet)
+ [使用 MongoDB 作为源时的安全要求 AWS DMS](#CHAP_Source.MongoDB.Security)
+ [对 MongoDB 集合进行分段并以并行方式迁移](#CHAP_Source.MongoDB.ParallelLoad)
+ [使用 MongoDB 作为源时迁移多个数据库 AWS DMS](#CHAP_Source.MongoDB.Multidatabase)
+ [使用 MongoDB 作为源代码时的限制 AWS DMS](#CHAP_Source.MongoDB.Limitations)
+ [使用 MongoDB 作为源时的端点配置设置 AWS DMS](#CHAP_Source.MongoDB.Configuration)
+ [MongoDB 的源数据类型](#CHAP_Source.MongoDB.DataTypes)

## 使用 MongoDB 作为源时所需的权限 AWS DMS
<a name="CHAP_Source.MongoDB.PrerequisitesCDC"></a>

对于使用 MongoDB 源进行 AWS DMS 迁移，您可以创建一个具有 root 权限的用户帐户，也可以创建仅具有要迁移的数据库权限的用户。

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

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

对于 MongoDB 3.x 源，以下代码在要迁移的数据库上创建具有最低权限的用户。

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

对于 MongoDB 4.x 源，以下代码创建具有最低权限的用户。

```
{ resource: { db: "", collection: "" }, actions: [ "find", "changeStream" ] }
```

例如，在“admin”数据库中创建以下角色。

```
use admin
db.createRole(
{
role: "changestreamrole",
privileges: [
{ resource: { db: "", collection: "" }, actions: [ "find","changeStream" ] }
],
roles: []
}
)
```

创建角色后，在要迁移的数据库中创建用户。

```
 use test
> db.createUser( 
{ 
user: "dms-user12345",
pwd: "password",
roles: [ { role: "changestreamrole", db: "admin" }, "read"] 
})
```

## 为 CDC 配置 MongoDB 副本集
<a name="CHAP_Source.MongoDB.PrerequisitesCDC.ReplicaSet"></a>

要将持续复制或 CDC 与 MongoDB 配合使用 AWS DMS ，需要访问 MongoDB 操作日志 (oplog)。要创建 oplog，您需要部署一个副本集 (如果没有副本集)。有关更多信息，请参阅 [MongoDB 文档](https://docs.mongodb.com/manual/tutorial/deploy-replica-set/)。

您可以将 CDC 用于作为源终端节点的 MongoDB 副本集的主要或次要节点。

**将独立实例转换为副本集**

1. 使用命令行，连接到 `mongo`。

   ```
   mongo localhost
   ```

1. 停止 `mongod` 服务。

   ```
   service mongod stop
   ```

1. 使用以下命令重新启动 `mongod`：

   ```
   mongod --replSet "rs0" --auth -port port_number
   ```

1. 使用以下命令测试与副本集的连接：

   ```
   mongo -u root -p password --host rs0/localhost:port_number 
     --authenticationDatabase "admin"
   ```

如果您打算执行文档模式迁移，请在创建 MongoDB 终端节点时选择选项 `_id as a separate column`。通过选择此选项，将创建另一个名为 `_id` 的列以作为主键。第二列是支持数据操作语言 (DML) 操作所 AWS DMS 必需的。

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

## 使用 MongoDB 作为源时的安全要求 AWS DMS
<a name="CHAP_Source.MongoDB.Security"></a>

AWS 分布式消息服务支持两种针对 MongoDB 的身份验证方法。这两种身份验证方法用于加密密码，因此它们仅在将 `authType` 参数设置为 *PASSWORD* 时使用。

MongoDB 身份验证方法如下：
+ **MONGODB-CR** – 提供向后兼容性
+ **SCRAM-SHA-1** – 使用 MongoDB 版本 3.x 和 4.0 时的默认值

如果未指定身份验证方法，则 AWS DMS 将使用 MongoDB 源版本的默认方法。

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

为了提高迁移任务的性能，MongoDB 源端点支持表映射中的并行完全加载的两个选项。

换句话说，在 JSON 设置中，对于并行完全加载，您可以使用表映射的自动分段或范围分段来迁移集合。通过自动分段，您可以指定标准， AWS DMS 以便在每个线程中自动对源进行细分以进行迁移。通过范围分割，您可以告知 AWS DMS DMS 要在每个线程中迁移的每个分段的具体范围。有关这些设置的更多信息，请参阅[表和集合设置规则和操作](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md)。

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

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

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


|  表设置选项  |  说明  | 
| --- | --- | 
|  `"type"`  |  （必需）对于将 MongoDB 作为源，设置为 `"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` 值，则会导致数据丢失或重复行错误。

### 使用范围分段并行迁移 MongoDB 数据库
<a name="CHAP_Source.MongoDB.ParallelLoad.Ranges"></a>

您可以通过为线程中的每个区段指定范围来并行迁移文档。使用这种方法，您可以根据您选择 AWS DMS 的每个线程的文档范围来告知要在每个线程中迁移的特定文档。

下图显示了包含七个项目并将 `_id` 作为主键的 MongoDB 集合。

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


要将集合拆分为三个特定的段 AWS DMS 以便并行迁移，可以在迁移任务中添加表映射规则。此方法如以下 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 > "5f805c97873173399a278d79" and num > 2 and _id  less-than-or-equal-to "5f805cc5873173399a278d7c" and num less-than-or-equal-to 5 (3 records)
Data with _id > "5f805cc5873173399a278d7c" and num > 5 (2 records)
```

迁移任务完成后，您可以从任务日志中验证表是否并行加载，如以下示例所示。您还可以验证用于从源表中卸载每个区段的 MongoDB `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 支持以下 MongoDB 数据类型作为分段键列：
+ 双精度
+ String
+ ObjectId
+ 32 位整数
+ 64 位整数

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

AWS DMS 3.4.5 及更高版本支持在单个任务中为所有支持的 MongoDB 版本迁移多个数据库。如果您要迁移多个数据库，请采取以下步骤：

1. 在创建 MongoDB 源端点时，请执行下列操作之一：
   + 在 DMS 控制台的**创建端点**页面上，确保**端点配置**下的**数据库名称**为空。
   + 使用 AWS CLI `CreateEndpoint`命令为中的`DatabaseName`参数分配一个空字符串值`MongoDBSettings`。

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

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

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

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

## 使用 MongoDB 作为源代码时的限制 AWS DMS
<a name="CHAP_Source.MongoDB.Limitations"></a>

以下是使用 MongoDB 作为源代码时的限制： AWS DMS
+ 在表模式下，集合中的文档的数据类型，必须与所用于的同一字段中值的数据类型一致。例如，如果集合中的文档包含 `'{ a:{ b:value ... }'`，则集合中引用 `a.b` 字段 `value` 的所有文档都必须为 `value` 使用相同的数据类型，无论该文档出现在集合中的哪个位置。
+ 当 `_id` 选项设置为单独一列时，ID 字符串不能超过 200 个字符。
+ 在表模式下，对象 ID 和数组类型键将转换为具有 `oid` 和 `array` 前缀的列。

  将使用具有前缀的名称在内部引用这些列。如果您在引用这些列 AWS DMS 时使用转换规则，请务必指定前缀列。例如，指定 `${oid__id}` 而不是 `${_id}`，或者指定 `${array__addresses}` 而不是 `${_addresses}`。
+  集合名称和键名不能包含美元符号（\$1）。
+ AWS DMS 在表格模式下，不支持包含具有不同大小写（大小）的相同字段的集合，目标为 RDBMS。例如， AWS DMS 不支持将两个名为`Field1`和的集合`field1`。
+ 表模式和文档模式具有前面所述的限制。
+ 使用自动分段进行并行迁移时，存在上述限制。
+ MongoDB 不支持源筛选器。
+ AWS DMS 不支持嵌套级别大于 97 的文档。
+ AWS DMS 迁移到非 DocumentDB 目标时需要使用 UTF-8 编码的源数据。对于包含非 UTF-8 字符的来源，请在迁移之前将其转换为 UTF-8，或者改为迁移到 Amazon DocumentDB。
+ AWS DMS 不支持 MongoDB 版本 5.0 的以下功能：
  + 实时重新分片
  + 客户端字段级加密（CSFLE）
  + 时间序列集合迁移
**注意**  
由于 DocumentDB 不支持时间序列集合，因此在完全加载阶段中迁移的时间序列集合将转换为 Amazon DocumentDB 中的普通集合。

## 使用 MongoDB 作为源时的端点配置设置 AWS DMS
<a name="CHAP_Source.MongoDB.Configuration"></a>

设置 MongoDB 源端点时，您可以使用控制台指定多个端点配置设置。 AWS DMS 

下表描述了使用 MongoDB 数据库作为源时可用的配置设置。 AWS DMS 


| 设置（属性） | 有效值 | 默认值和描述 | 
| --- | --- | --- | 
|  **身份验证模式**  |  `"none"` `"password"`  |  值 `"password"` 提示输入用户名和密码。如果指定 `"none"`，则不使用用户名和密码参数。  | 
|  **身份验证源**  |  有效的 MongoDB 数据库名称。  |  您为身份验证所用凭证进行验证时使用的 MongoDB 数据库的名称。默认值为 `"admin"`。  | 
|  **身份验证机制**  |  `"default"` `"mongodb_cr"` `"scram_sha_1"`  |  身份验证机制。` "default"` 值为 `"scram_sha_1"`。当 `authType` 设为 `"no"` 时，不使用此设置。  | 
|  **元数据模式**  |  文档和表  |  选择文档模式或表模式。  | 
|  **要扫描的文档数**（`docsToInvestigate`）  |  大于 `0` 的正整数。  |  仅在表模式下使用此选项来定义目标表定义。  | 
|  **将 \$1id 作为单独的列**  |  复选框中的选中标记  |  可选的复选标记框，用于创建另一个名为 `_id` 的列作为主键。  | 
|   `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 任务在遇到多文档事务时将失败。  | 
|  `socketTimeoutMS`  |  大于或等于 0 的整数。 仅限额外连接属性（ECA）。  |  此设置以毫秒为单位，用于配置 MongoDB 客户端的连接超时。如果该值小于或等于零，则使用 MongoDB 客户端默认值。  | 
|   `UseUpdateLookUp`   |  `true` `false`  |  如果为 true，则在 CDC 更新事件期间，将整个更新的文档 AWS DMS 复制到目标。设置为 false 时， AWS DMS 使用 MongoDB update 命令仅更新目标上文档中已修改的字段。  | 
|   `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.MongoDB.html)  | 
|  `useTransactionVerification`  |  `true` `false`  |  当为 `false` 时，禁用更改流和操作日志之间的验证。  如果更改流和操作日志条目之间出现差异，则可能会错过操作，因为在这种情况下，DMS 的默认行为是使任务失败。默认值：`true`。   | 
|  `useOplog`  |  `true` `false`  |  当为 `true` 时，使 DMS 任务直接从“oplog”中读取，而不是使用更改流。默认值：`false`。  | 

如果您选择**文档**作为**元数据模式**，则可以使用不同的选项。

如果目标端点是 DocumentDB，请确保在**文档**模式下运行迁移。此外，修改您的源端点并选择选项**将 \$1id 作为单独的列**。如果您的源 MongoDB 工作负载涉及事务，则这是必需的先决条件。

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

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

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

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


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