如何确保Cosmos DB中属性的唯一性

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

我们要求集合文档中特定字段的值必须是唯一的。这个集合是分区的,所以我不能在每次插入之前编写一个触发器或SP来确保这一点(因为我想确保整个集合的唯一性,而不仅仅是分区)。

我遇到过以下链接,其中提到有一个uniqueKeyPolicy可以添加到集合中,但在官方文档中看不到任何示例或更多信息。

最好的方法是什么?

我发现的信息:https://github.com/Azure/azure-documentdb-dotnet/blob/master/changelog.md - 通过在DocumentCollection上使用UniqueKeyPolicy属性,添加为文档指定唯一索引的功能。

https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.documents.uniquekeypolicy.uniquekeys?view=azure-dotnet

https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.documents.uniquekey?view=azure-dotnet

更新:经过一些尝试后,我能够在创建新集合(非分区)时使用.NET代码中的DocumentClient执行此操作。但是有没有办法为现有集合添加此约束。此外,我无法从门户网站找到这样做的方法。我应该看看有什么特别的地方吗?

c# azure azure-cosmosdb
2个回答
0
投票

看来没有办法做交叉分区唯一键,只能在集合创建过程中定义唯一键。来自the documentation

创建容器时必须定义唯一键,并且唯一键的作用域是分区键。要构建前面的示例,如果基于邮政编码进行分区,则可以在每个分区中复制表中的记录。

无法更新现有容器以使用唯一键。


0
投票

Cosmos DB的DocumentDB API目前不提供属性的唯一索引。此功能在UserVoice上列为“已启动”。也许有一些准备工作正在进行以支持独特的索引,但目前没有官方文档说明它们存在,或者如果存在它们如何使用它们。

编辑看起来这个功能最近推出了,正如更新.net SDK发行说明所证明的那样。 尚未发布官方文档。 文档现已发布here

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