【发布时间】:2020-04-19 23:08:09
【问题描述】:
在 Azure Cosmos DB 中,支持唯一键。每个唯一键都定义为一组路径,表示存储文档中的值。这种路径的一个例子是/contact/firstName。从官方文档中不清楚(实际上根本没有提到)这些路径如何通过文档中的嵌入式数组向下应用,或者当路径导航到基数大于一的嵌套文档时如何应用唯一键语义。
例如,假设我有一个这样的文档来存储一个用户组和一组成员用户:
{
"id": "ABCD1234",
"name": "Administrators",
"members":
[
{
"userId": 1,
"enabled": true
},
{
"userId": 2,
"enabled": true
}
]
}
我希望组名在逻辑分区中是唯一的,因此我添加了一个路径为 /groupName 的唯一键。
我还想确保成员是唯一的,即相同的userId 值不会在给定组内多次出现。天真地,我可能会尝试使用路径 /name 和 /members/userId 创建一个唯一键。但这不起作用,唯一键似乎没有效果。
我尝试了几种不同的变体,但都没有达到我预期的效果。
所以我的问题:
- 是否可以创建“遍历”嵌入对象数组的唯一键?
- 如果是,那么正确的路径语法是什么?
- 鉴于唯一键的意思是“在整个逻辑分区中唯一”而不是“在整个文档中唯一”,如果我真的确实设法定义了一个涉及属性的唯一键会发生什么嵌入的
members对象,并试图保存两个成员都为零的不同组?这些键是否不会在逻辑上对两个组都评估为null或undefined,从而阻止我保存其中一个?
感谢您提供任何有助于解决此问题的见解!
【问题讨论】:
标签: azure azure-cosmosdb azure-cosmosdb-sqlapi