为 cosmosDB 中的唯一键约束强制执行不区分大小写的值?

问题描述

我们有一个 sql 容器。我们希望对特定属性(例如“名称”。如果文档的名称是“ALICE”,则该逻辑分区中的任何其他文档都不应将“alice”作为名称)强制执行不区分大小写的唯一约束。 一种解决方案可能是引入另一个属性 LowerCaseName,并在路径 /LowerCaseName 上强制执行本机支持的唯一键配置。每次更新 Name 时,我们都会确保将 LowerCaseName 始终更新为同一请求中 Name 的小写版本。

我不确定这是否是解决此问题的最佳做法?谢谢。

public MyDocumentModel
{
    string Name {get; set;}

    string LowerCaseName {get; set;}
}

解决方法

来自文档 here

在 Azure Cosmos DB 的 SQL(核心)API 中,项目存储为 JSON 值。 这些 JSON 值区分大小写。当您选择房产作为 唯一键,您可以为该属性插入区分大小写的值。 例如,如果您在 name 属性上定义了唯一键, “Gaby”与“gaby”不同,您可以将两者都插入 容器。

基于此,我相信您使用第二个属性来强制执行唯一键的方法是正确的。