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

时间:2018-11-26 23:07:11

标签: azure azure-cosmosdb

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

4 个答案:

答案 0 :(得分:1)

查看Cosmos DB唯一键的一种更简单的方法是查看资源的ARM模板。

在您的Cosmos DB帐户上,单击“设置/导出模板”-生成模板并在完成后在线查看。您将在“ uniqueKeyPolicy”标签下找到它们。

答案 1 :(得分:0)

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

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

但是,我在门户网站上看不到与您一样的东西。也许这是一个错误。

您可以使用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());
}

答案 2 :(得分:0)

这是为我工作的基本代码。写入集合的代码以Json格式输出。我认为这类似于您在门户网站中看到的内容,但是它跳过或省略了uniqueKeyPolicy信息。

作为旁注,我认为我发现了错误或奇怪的行为。插入新文档会抛出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);

答案 3 :(得分:0)

将很快添加对在集合属性中显示唯一密钥策略的支持。同时,您可以使用DocumentDBStudio查看集合中的唯一键。设置唯一密钥策略后,将无法对其进行修改。

WRT的异常行为,能否请您分享完整的隔离副本并解释预期和实际行为。