覆盖Azure cosmos DB中的ID创建

yaj*_*aju 3 azure azure-cosmosdb

我有一个JSON文档,我需要推送到azure cosmos db.我正在使用DocumentDB数据迁移工具将我的json文件转储到azure cosmos DB.问题是我的JSON包含一个id字段,它对所有记录都是相同的.对于e,g.

"angularAcceleration_T12_x:-0.137993,"id":"5946001","jointAngle_jRightHip_z"

由于这个id字段,我无法在我的集合中插入超过1条记录,因为插入一条记录后,我收到错误消息"已存在指定ID的资源".有没有办法强制cosmos DB忽略JSON中的id字段并为每个条目创建一个GUID,就像它没有找到id字段一样.

谢谢,Yaju

yaj*_*aju 9

经过大量的搜索,我得出结论,如果你的json中有一个名为"id"(区分大小写)的列,cosmos db将把该列值作为文档的id,你不能使用任何其他列作为唯一标识符.如果cosmos找不到id字段,它将创建一个GUID作为文档的id.

  • 我认为,此“功能”区分大小写是一个错误。如果您希望在对象中获得文档级别的ID,我可以执行查找和更新,则该字段需要为“ id”而不是“ Id”。这是荒唐的 (2认同)

Imr*_*vel 8

Microsoft.Azure.Documents.Resource.Id 文档提示它以固定名称的 JSON 序列化"id"

[Newtonsoft.Json.JsonProperty(PropertyName="id")]
public virtual string Id { get; set; }
Run Code Online (Sandbox Code Playgroud)

所以,我会说你不能使用另一个属性作为存储 PK

您可以做的是自己转换您的 JSON 文档,例如将您的当前文件重命名idoriginalId或类似的。然后 documentDB 会在导入时为您生成唯一的 ID。

  • 对于后代,我发现当使用 System.Text.Json 中的 JsonPropertyName("propName") 时,这不适用于 CosmosDB。我必须按照您的回答中所述使用 Newtonsoft JsonProperty。 (2认同)