Как удалить документ из CosmosDB с помощью облачной функции Azure?
Я выяснил, как создавать, читать и обновлять документы в моем экземпляре CosmosDB с помощью облачных функций Azure, но все еще не знаю, как реализовать удаление. Основная документация, которую я использовал в качестве справочной, была https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-cosmos-db-triggered-function.
Я попытался использовать привязку ввода и вывода без идентификатора (таким образом, извлекая всю коллекцию), а затем отфильтровать элемент, который я хочу удалить из inputDocuments, и установить результат в качестве outputDocuments. К сожалению, похоже, что на самом деле этот элемент не удаляется из экземпляра базы данных. Есть идеи, что мне не хватает? Какой правильный способ сделать это?
Вот код, который я написал:
const { id } = req.query;
context.bindings.outputDocuments = context.bindings.inputDocuments;
const index = context.bindings.outputDocuments.findIndex(doc => doc.id === id);
const doc = context.bindings.outputDocuments.splice(index, 1);
Я также попробовал более простую версию, но это не имело значения:
const { id } = req.query;
context.bindings.outputDocuments = context.bindings.inputDocuments.filter(doc => doc.id !== id);
С помощью операторов регистрации я проверил, что моя функция корректно обновляла outputDocuments для обеих вышеупомянутых реализаций.
Вот мои привязки:
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"delete"
]
},
{
"type": "http",
"direction": "out",
"name": "res"
},
{
"type": "documentDB",
"name": "inputDocuments",
"databaseName": "heroesDatabase",
"collectionName": "HeroesCollection",
"connection": "ydogandjiev-documentdb_DOCUMENTDB",
"direction": "in"
},
{
"type": "documentDB",
"name": "outputDocuments",
"databaseName": "heroesDatabase",
"collectionName": "HeroesCollection",
"createIfNotExists": false,
"connection": "ydogandjiev-documentdb_DOCUMENTDB",
"direction": "out"
}
],
"disabled": false
}
1 ответ
Вы можете использовать клиент и позвонить DeleteDocumentAsync
как указано в примере ниже
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, string customerid, TraceWriter log, DocumentClient client)
{
HttpResponseMessage response = new HttpResponseMessage();
try {
await client.DeleteDocumentAsync(UriFactory.CreateDocumentUri("BankDatabase","Customers", customerid));
response.StatusCode = HttpStatusCode.OK;
log.Info($"Deleted customer with id: {customerid}");
}
catch (DocumentClientException exc)
{
if (exc.StatusCode == HttpStatusCode.NotFound)
{
response = req.CreateResponse(HttpStatusCode.NotFound, "There is no item with given ID in our database!");
}
else
{
response = req.CreateResponse(HttpStatusCode.InternalServerError, "Internal server error. Contact administrator.");
}
}
return response;
}
Найдите полный репо на Azure CosmosDB с функциями Azure