如何使用 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
我来自使用 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