Как определить уникальные ключи, включающие свойства во встроенных массивах в Azure Cosmos DB? - PullRequest
0 голосов
/ 20 апреля 2020

В Azure Cosmos DB, есть поддержка уникальных ключей. Каждый уникальный ключ определяется как набор путей, представляющих значения в хранимых документах. Примером такого пути будет /contact/firstName. Из официальных документов неясно (фактически это вообще не упоминается), как эти пути применяются вниз через встроенные массивы в документе, или как применяется уникальная семантика ключа, когда пути переходят во вложенные документы с количеством элементов более одного.

Например, допустим, у меня есть такой документ для хранения группы пользователей и набора пользователей:

{
  "id": "ABCD1234",
  "name": "Administrators",
  "members":
  [
    {
      "userId": 1,
      "enabled": true
    },
    {
      "userId": 2,
      "enabled": true
    }
  ]
}

Я хочу, чтобы имя группы было уникальным для логического раздела, поэтому Я добавляю уникальный ключ с путем /groupName.

. Я также хочу убедиться, что члены уникальны, то есть одно и то же значение userId не встречается более одного раза в данной группе. Наивно, я мог бы попытаться создать уникальный ключ с путями /name и /members/userId. Но это не работает, уникальный ключ, кажется, не имеет никакого эффекта.

Я пробовал несколько различных вариантов этого, но ни один из них не дал ожидаемого эффекта.

Итак, мои вопросы:

  1. Можно ли создать уникальные ключи, которые "переходят" в массивы встроенных объектов?
  2. Если да, то какой правильный синтаксис пути для этого?
  3. Учитывая, что уникальные ключи означают «уникальные по всему логическому разделу», а не «уникальные по всему документу», что бы произошло, если бы мне на самом деле удалось определить уникальный ключ, включающий свойства на встроенные members объекты, и пытались сохранить две разные группы, которые обе имеют нулевые члены? Разве эти ключи не будут логически оцениваться как null или undefined для обеих групп, что помешает мне сохранить один из них?

Благодарен за любые идеи, которые помогут прояснить это!

1 Ответ

1 голос
/ 20 апреля 2020

Уникальные ключи не попадают в массивы в документах, поэтому они не документированы как таковые.

Подробнее о том, что такое логический раздел, см. В наших документах по разделам

Если вы хотите, чтобы уникальность была похожа на то, что вы описываете, создайте разные документы в логическом разделе.

...