Как создать уникальный индекс с помощью documentDB

Я исхожу из использования mongoDB, поэтому буду использовать это в качестве примера, в нем я могу сделать что-то вроде.

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

И затем всякий раз, когда я пытаюсь вставить данные с тем же идентификатором, я получаю ошибку дублирующего ключа, и это не сработает. здорово!

Но можно ли сделать то же самое с documentDB?

В настоящее время у меня есть следующий код, написанный с помощью node.js для вставки данных:

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

person wazzaday    schedule 20.07.2015    source источник


Ответы (3)


DocumentDB не имеет встроенной поддержки определения уникальных ограничений. Свойство id — это особое исключение, в котором оно является первичным ключом документа и должно быть уникальным.

Вы можете использовать триггеры DocumentDB для реализации уникального ограничения на другие свойства документа. У меня есть пример триггера на Github здесь< /а>.

С точки зрения индексации каждый атрибут в каждом документе автоматически индексируется по умолчанию. Если вы хотите указать, какие пути индексируются, а какие нет, вы можете определить пользовательскую политика индексирования на уровне коллекции.

person Andrew Liu    schedule 20.07.2015
comment
Похоже, ссылка стала жертвой гниения ссылки. Последний пример можно найти здесь: github.com/Azure/azure-documentdb-js-server/blob/master/samples/ - person Andrew Liu; 07.07.2016

Теперь доступна поддержка уникальных ограничений: https://docs.microsoft.com/en-us/azure/cosmos-db/unique-keys.

person Michael Koltachev    schedule 01.12.2017
comment
Поддерживается ли клиент узла? В доке вроде нет. - person Andrea Richiardi; 24.05.2018

На самом деле это довольно легко. Но вам придется сделать это во время создания коллекции.

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 });

Когда вы нарушаете ограничение uniquekey, проверьте это исключение

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 ...
    }
}

Для получения дополнительной информации посетите мой блог

person Dibran    schedule 21.08.2018