我们正在使用 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)
背景:
BsonSerializer.RegisterSerializer(new GuidSerializer(GuidRepresentation.Standard));
BsonSerializer.RegisterSerializer(new ObjectSerializer(BsonSerializer.LookupDiscriminatorConvention(typeof(object)),GuidRepresentation.Standard));
BsonDefaults.GuidRepresentation = GuidRepresentation.Standard;
BsonDefaults.GuidRepresentationMode = GuidRepresentationMode.V3;
base64 编码形式“oGI4z7TPyEWmvAAAG2C9oQ==”没有这种歧义,因此大多数现代 MongoDB 驱动程序在显示旧版 UUID 时将使用该形式。
要避免此问题,请使用现代 UUID 表示形式(BSON 二进制类型 4)。
在 C# 中,在生成 UUID 之前注册序列化器以使用标准表示形式:
BsonSerializer.RegisterSerializer(new GuidSerializer(GuidRepresentation.Standard));