Я полагаю, что вы путаете partition key
с primary key
.
Ключ разделения определяет, как данные масштабируются по горизонтали.Это не должно быть уникальным, так как в противном случае любое чтение, кроме точного поиска документа, потребует сканирования всех разделов, что будет неэффективно.В вашем случае deviceIdentity
может быть подходящим кандидатом - все версии одного и того же устройства попадают в один и тот же раздел.
Первичный ключ - это идентификатор вашего документа (поле id
).Как вы уже заметили, может быть только 1 документ с указанным id
.Поле id
ДОЛЖНО быть уникальным для каждого документа, который вы хотите сохранить.В вашем случае вы можете использовать комбинацию значений, таких как "deviceIdentity1, v2"
в качестве идентификатора.Или вы можете использовать технический уникальный идентификатор, например, guid.
Также обратите внимание, что Уникальные ключи в Azure Cosmos DB :
Создавая уникальныйПолитика ключей при создании контейнера обеспечивает уникальность одного или нескольких значений на ключ раздела .
Это означает, что если ваш ключ раздела равен deviceIdentity
, вам не нужно дублировать deviceIdentity
в уникальной части ограничения.Ограничения на /version
было бы достаточно, чтобы гарантировать, что каждый отдельный раздел / устройство имеет не более одного документа на версию.