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

时间:2017-11-22 09:22:43

标签: c# azure azure-cosmosdb

我们要求集合文档中特定字段的值必须是唯一的。这个集合是分区的,所以我不能在每次插入之前编写一个触发器或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执行此操作。但是有没有办法为现有集合添加此约束。此外,我无法从门户网站找到这样做的方法。我应该看看有什么特别的地方吗?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

似乎没有办法做交叉分区唯一键,只能在创建集合时定义唯一键。来自the documentation

  

创建容器时必须定义唯一键,并且   唯一键的作用域是分区键。建立在早期   例如,如果您基于邮政编码进行分区,则可以使用   表中的记录在每个分区中重复。

     

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