В 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
для обеих групп, что помешает мне сохранить один из них?
Благодарен за любые идеи, которые помогут прояснить это!