从一个 Azure Cosmos DB for Mongo DB 复制到另一个时,UUID 格式不同

问题描述 投票:0回答:1

我们正在使用 Azure 数据工厂将非产品集合从一个 Azure Cosmos DB for Mongo DB 移动到同一资源组中的另一个。它们都是基于 RU 的资源。我能够使用“摄取”模板创建一个简单的管道,其中一个复制步骤已成功将文档从源集合复制到所需的目标。

不幸的是,其中一条数据是二进制 UUID,当我使用 MongoDB Compass 查看等效文档时,这些值看起来有所不同。在源代码中,我可以看到数据正确表示为:

UUID('cf3862a0-cfb4-45c8-a6bc-00001b60bda1') 

但在迁移后的集合中它表示为

Binary.createFromBase64('oGI4z7TPyEWmvAAAG2C9oQ==', 3)

如何迁移数据并保留二进制数据 UUID 数据的表示形式?


在 Mongo DB Compass 中查看源文档的相关字段,如下所示: MyField : UUID('cf3862a0-cfb4-45c8-a6bc-00001b60bda1')

查看 Azure 数据工厂中的预览,相同的字段在 JSON 中表示为: “我的领域”:{ "$binary": "oGI4z7TPyEWmvAAAG2C9oQ==", “$类型”:“03” },

但是在转换后的文档中,我在 Compass 中看到相同的字段: 我的领域: Binary.createFromBase64('oGI4z7TPyEWmvAAAG2C9oQ==', 3)


背景:

  1. 最初将数据移动到源中时,我们使用 C# 代码配置了 BSON 序列化器来实现我们想要的结果(UUID('cf3862a0-cfb4-45c8-a6bc-00001b60bda1') 格式的数据)
  2. BsonSerializer.RegisterSerializer(new GuidSerializer(GuidRepresentation.Standard)); BsonSerializer.RegisterSerializer(new ObjectSerializer(BsonSerializer.LookupDiscriminatorConvention(typeof(object)),GuidRepresentation.Standard)); BsonDefaults.GuidRepresentation = GuidRepresentation.Standard; BsonDefaults.GuidRepresentationMode = GuidRepresentationMode.V3;
我探索了许多不同的选项来执行此操作,包括 Azure Data Studio(不可行,因为它不支持基于 RU 的数据库)、mongodbdump/restore 和 Azure Data Factory。 Azure 数据工厂看起来简单且前景广阔。
mongodb azure-data-factory uuid azure-cosmosdb-mongoapi azure-data-studio
1个回答
0
投票

base64 编码形式“oGI4z7TPyEWmvAAAG2C9oQ==”没有这种歧义,因此大多数现代 MongoDB 驱动程序在显示旧版 UUID 时将使用该形式。

要避免此问题,请使用现代 UUID 表示形式(BSON 二进制类型 4)。

在 C# 中,在生成 UUID 之前注册序列化器以使用标准表示形式:

BsonSerializer.RegisterSerializer(new GuidSerializer(GuidRepresentation.Standard));

© www.soinside.com 2019 - 2024. All rights reserved.