如何使用documentDB创建唯一索引

时间:2015-07-20 14:58:02

标签: azure-cosmosdb

我来自使用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);
});

3 个答案:

答案 0 :(得分:4)

答案 1 :(得分:3)

DocumentDB没有定义唯一约束的本机支持。 IF ({INDICATOR} = 'Y') Then ( ToText({numeric value}) ) Else if ({INDICATOR} <> 'Y') Then ( "" ); 属性是一个特殊的例外,它是文档的主键,必须是唯一的。

您可以利用DocumentDB的triggers对其他文档属性实施唯一约束。我在Github here上有一个示例触发器。

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

答案 2 :(得分:1)

实际上很容易。但是您必须在创建集合时执行此操作。

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