簡體   English   中英

使用 AWS DMS 將 DocumentDB 表遷移到另一個 DocumentDB 表時如何在目標表中自動生成新的 _id

[英]How to autogenerate new _id in target table when migrating a DocumentDB table using AWS DMS to another DocumentDB table

我有一個 AWS DocumentDB,其模式my-schema和名為my-table ,其結構類似於

{
    "_id": { "FIELD_1" : "001", "FIELD_2" : "A1" },
    "FIELD_1": "001",
    "FILED_2": "A1",
    .
    .
    .
}

如您所見, _id包含FIELD_1 & FIELD_2 這兩個字段的組合對於所有記錄都是唯一的。 這兩個字段形成了原始 oracle 數據庫中的復合主鍵,這就是為什么當我們從 oracle 遷移到 DocumentDB 時,AWS DMS 選擇將其放入_id中。

現在的問題是,我們需要_id為 mongodb ObjectId 而不是嵌套的 json。

我試過的是:

  1. 使用我的 DocumentDB 創建一個源端點(其中包含這個錯誤的 _id 數據,在模式my-schema中)。
  2. 使用相同的 DocumentDB 但使用新模式my-new-schema和相同的表名my-table創建目標端點。
  3. 然后,我使用轉換(刪除列 _id)將數據從 my-schema 遷移到 my-new-schema。

但它仍然將相同的嵌套_id復制到目標表中。 我已經嘗試了文檔元數據模式和表元數據模式。 在表元數據模式下,它甚至不傳輸數據,因為在將 _id 扁平化為 _id.FIELD_1 和 _id.FIELD_2 之后。 DMS 拋出異常“文檔不能有”。 在字段名稱中”

我知道我可以使用代碼輕松地做到這一點,但如果可以使用 DMS 以某種方式實現我的目標,我會更願意這樣做。

或者我們可以直接使用 mongodb 命令來實現嗎?

不確定 DMS,但我認為您可以使用帶有 $out 階段的聚合查詢來執行此操作。 投影你需要的字段,排除_id,新集合中的文檔將使用通常的ObjectId插入。 是這樣的:

db.collection.aggregate([
  {$project:
    {_id:0,
    FIELD_1:1,
    FIELD_2:1
  }},
  {$out: 'new_collection'}
])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM