我如何定义Azure Cosmos DB中嵌入阵列中涉及属性的唯一键?

我如何定义Azure Cosmos DB中嵌入阵列中涉及属性的唯一键?,azure,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure,Azure Cosmosdb,Azure Cosmosdb Sqlapi,在Azure Cosmos DB中,支持唯一密钥。每个唯一键定义为一组表示存储文档中的值的路径。这种路径的一个例子是/contact/firstName。官方文档(事实上根本没有提到)不清楚这些路径如何通过文档中的嵌入式数组应用,或者当路径导航到基数大于1的嵌套文档时,如何应用唯一的键语义 例如,假设我有一个这样的文档来存储一个用户组和一组成员用户: { "id": "ABCD1234", "name": "Administrators", "members": [ {

在Azure Cosmos DB中,支持唯一密钥。每个唯一键定义为一组表示存储文档中的值的路径。这种路径的一个例子是
/contact/firstName
。官方文档(事实上根本没有提到)不清楚这些路径如何通过文档中的嵌入式数组应用,或者当路径导航到基数大于1的嵌套文档时,如何应用唯一的键语义

例如,假设我有一个这样的文档来存储一个用户组和一组成员用户:

{
  "id": "ABCD1234",
  "name": "Administrators",
  "members":
  [
    {
      "userId": 1,
      "enabled": true
    },
    {
      "userId": 2,
      "enabled": true
    }
  ]
}
我希望组名在整个逻辑分区中是唯一的,因此我添加了一个路径为
/groupName
的唯一键

我还希望确保成员是唯一的,即相同的
userId
值在给定组中不会出现多次。天真的是,我可能会尝试创建一个具有路径
/name
/members/userId
的唯一键。但这不起作用,唯一键似乎没有效果

我试过几种不同的方法,但都没有达到我预期的效果

所以我的问题是:

  • 是否可以创建“遍历”嵌入对象数组的唯一键
  • 如果是,正确的路径语法是什么
  • 鉴于unique key的意思是“在整个逻辑分区中都是唯一的”,而不是“在整个文档中都是唯一的”,如果我真的设法定义了一个包含嵌入
    成员
    对象属性的唯一key,并试图保存两个都没有成员的不同组,会发生什么?那么,对于这两个组,这些键在逻辑上不会计算为
    null
    undefined
    ,从而阻止我保存其中一个

  • 感谢您提供的帮助澄清这一问题的见解

    唯一键不会遍历到文档中的数组中,这就是为什么它们没有这样记录的原因

    有关什么是逻辑分区的详细信息,请参阅上的文档


    如果您想获得所描述的唯一性,请在逻辑分区中创建不同的文档。

    感谢Mark对此进行清理。我怀疑是这样的,但我认为,对于其他可能感到疑惑的人来说,要求将其明确记录下来是很有用的。