Как удалить все данные в разделе?

У меня есть коллекция CosmosDB с несколькими различными разделами. Я хочу удалить все данные в одном из разделов, поэтому я попытался выполнить команду:

db.myCollection.deleteAll({PartitionKey: 'pop-9q'})

куда PartitionKey это поле, на котором я делю / шарду на основе. Но когда я выполняю это, он возвращает не очень полезное сообщение:

ОШИБКА: произошла ошибка

Почему я получаю это сообщение и как я могу получить более подробную информацию о причине или найти решение?

4 ответа

Решение

В настоящее время вы не можете выполнить массовое удаление. Пожалуйста, проголосуйте и прокомментируйте эту функцию: добавьте возможность удалять ВСЕ данные в разделе

Кроме того, какой API вы используете? Для Gremlin API вы можете выполнить что-то вроде следующего: gV(). Drop()

Эта возможность добавлена ​​в Microsoft.Azure.Cosmos SDK. В настоящее время она доступна только в качестве функции предварительного просмотра (для этого требуется подписка на портале). Дополнительные сведения см. здесь:https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/how-to-delete-by-partition-key?tabs=dotnet-example

Пример кода, включенный туда:

      // Get reference to the container
var container = cosmosClient.GetContainer("DatabaseName", "ContainerName");

// Delete by logical partition key
ResponseMessage deleteResponse = await container.DeleteAllItemsByPartitionKeyStreamAsync(new PartitionKey("Contoso"));

 if (deleteResponse.IsSuccessStatusCode) {
    Console.WriteLine($"Delete all documents with partition key operation has successfully started");
}

Как сказал @Mike, delete all data функция пока не поддерживается в Cosmos db, sql api и mongo api. Я заметил, что вы уже добавили комментарии в приведенной выше ссылке. Я просто предлагаю вам обходной путь, который использует хранимую процедуру массового удаления для cosmos db sql api.

(пример кода: https://gist.github.com/deepumi/2a23c5380202bddf0b85e83baf5833be)

Для mongo api, к сожалению, даже хранимая процедура не поддерживается. Вы можете создать функцию запуска HTTP Azure для выполнения кода массового удаления в функции в любое время или объединить его с программным кодом.

Надеюсь, это поможет вам.

Для GremlinAPI вы можете сделать следующее:

  1. Убедитесь, что у вас есть свойство непосредственно на вершине, а также на ребре. если у вас его нет, то просто добавьте свойство ко всем вершинам и ребрам.
  2. задайте свойство правильно каждый раз, когда вы вставляете вершину или ребро вместе с установкой ключа раздела для вашего контейнера CosmosDB.

чтобы удалить все данные из вышеуказанного раздела, просто сделайте следующее:

      g.V().has('partitionKey', 'yourPartitionKey').drop()

это гарантирует, что только те вершины, которые имеютyourPartitionKeyценность дляpartitionKeyсвойство будет удалено.

Поскольку Gremlin гарантирует отсутствие висячих ребер при удалении вершины, все ребра также будут автоматически удалены.

Другие вопросы по тегам