如何使用 documentDB 创建唯一索引

How to create a unique index with documentDB

我来自使用 mongoDB 所以将以此为例,在其中我可以做类似的事情。

collection.ensureIndex('id', {unique: true, dropDups: true });

然后每当我尝试插入具有相同 ID 的数据时,我都会收到重复键错误并且无法正常工作。太棒了!

但是可以用 documentDB 做类似的事情吗?

目前我用node.js编写了以下代码来插入数据:

client.createDocument(collection_id, data_to_insert, function (err, doc) {
    callback(err, doc);
});

DocumentDB 本身不支持定义唯一约束。 id 属性 是一个特殊的例外,它是文档的主键并且必须是唯一的。

您可以利用 DocumentDB 的 triggers to implement a unique constraint on other document properties. I have a sample trigger on Github here

从索引的角度来看 - 默认情况下,每个文档中的每个属性都会自动建立索引。如果您希望专门调整哪些路径被索引,哪些路径没有,您可以在集合级别定义自定义 index policy

现在支持唯一约束:https://docs.microsoft.com/en-us/azure/cosmos-db/unique-keys

其实很简单。但是您必须在集合创建时间进行。

DocumentCollection myCollection = new DocumentCollection();
myCollection.Id = "ClientCollection";
myCollection.UniqueKeyPolicy = new UniqueKeyPolicy
{
    UniqueKeys =
    new Collection<UniqueKey>
    {
        new UniqueKey { Paths = new Collection<string> { "/name" , "/country" }}
        new UniqueKey { Paths = new Collection<string> { "/users/title" } },
    }
};
await client.CreateDocumentCollectionAsync(
    UriFactory.CreateDatabaseUri(dataBase),
    myCollection,
    new RequestOptions { OfferThroughput = 400 });

当您违反唯一键约束时,请检查此异常

try
{
    response = await client.CreateDocumentAsync(collectionUri, document, requestOptions);
}
catch (Microsoft.Azure.Documents.DocumentClientException ex)
{
    if ( ex.StatusCode == System.Net.HttpStatusCode.Conflict )
    {
        // Unique key constraint violation ...
    }
}

有关详细信息,请访问 my blog