azure 如何在Cosmos DB容器上显示唯一键?

g0czyy6m  于 2023-01-09  发布在  其他
关注(0)|答案(5)|浏览(130)

This link意味着可以通过查看设置在Cosmos DB容器中看到唯一键。但是,我似乎无法使用门户和存储资源管理器找到它们。如何查看现有Cosmos DB容器上的唯一键?我有一个文档由于键冲突而无法加载,这应该是不可能的,所以我需要确认键是什么。

zwghvu4y

zwghvu4y1#

查看Cosmos DB唯一键的一种稍微简单一点的方法是查看资源的ARM模板。
在你的Cosmos DB账户上,点击设置/导出模板-让模板生成并在完成后在线查看。你会在“uniqueKeyPolicy”标签下找到它们。

dluptydi

dluptydi2#

基于此blob,唯一密钥策略应如下所示:

"uniqueKeyPolicy": {
    "uniqueKeys": [
      {
        "paths": [
          "/name",
          "/country"
        ]
      },
      {
        "paths": [
          "/users/title"
        ]
      }
    ]
  }

但是,我和你一样在传送门上看不到它,可能是这里有个bug。
您可以使用cosmos db sdk作为获得唯一密钥策略的变通方法,请参阅我的java示例代码。

ResourceResponse<DocumentCollection> response1 = documentClient.readCollection("dbs/db/colls/test", null);
DocumentCollection coll =response1.getResource();
UniqueKeyPolicy uniqueKeyPolicy = coll.getUniqueKeyPolicy();
Collection<UniqueKey> uniqueKeyCollections = uniqueKeyPolicy.getUniqueKeys();

for(UniqueKey uniqueKey : uniqueKeyCollections){
    System.out.println(uniqueKey.getPaths());
}
f87krz0w

f87krz0w3#

下面是我使用的基本代码。编写集合的代码以Json格式输出。我认为这与您在门户中看到的类似,但它跳过或省略了uniqueKeyPolicy信息。
作为侧记,我想我发现了一个bug或奇怪的行为。插入新文档可能会抛出unique index constraint violation,但更新不会。

this.EndpointUrl = ConfigurationManager.AppSettings["EndpointUrl"];
        this.PrimaryKey = ConfigurationManager.AppSettings["PrimaryKey"];
        string dbname = ConfigurationManager.AppSettings["dbname"];
        string containername = ConfigurationManager.AppSettings["containername"];
        this.client = new DocumentClient(new Uri(EndpointUrl), PrimaryKey);
        DocumentCollection collection = await client.ReadDocumentCollectionAsync(UriFactory.CreateDocumentCollectionUri(dbname, containername));
        Console.WriteLine("\n4. Found Collection \n{0}\n", collection);
vd8tlhqk

vd8tlhqk4#

支持在集合属性中显示唯一键策略,同时可以使用DocumentDBStudio查看集合中的唯一键,唯一键策略一旦设置就不能修改。
WRT奇怪的行为,你能分享完整的隔离再现并解释预期和实际的行为吗?

cxfofazt

cxfofazt5#

Image: Azure Portal - Cosmos DB - Export Template Location
在这里你可以在你的Azure门户中查看ARM模板,正如赢家评论所说,你会在“uniqueKeyPolicy”标签下找到唯一的密钥。
Image: uniqueKeyPolicy in the ARM Template

相关问题