使用多个分区键从Azure cosmos DB集合中删除文档
我必须通过azure门户从azure cosmos DB删除一些文档。 我在容器中编写了一个存储过程,它将删除必须删除的数据。 但在执行存储过程时,它会请求分区键值。我必须删除具有不同分区键的文档 下面给出了所使用的存储过程使用多个分区键从Azure cosmos DB集合中删除文档,azure,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我必须通过azure门户从azure cosmos DB删除一些文档。 我在容器中编写了一个存储过程,它将删除必须删除的数据。 但在执行存储过程时,它会请求分区键值。我必须删除具有不同分区键的文档 下面给出了所使用的存储过程 function bulkDeleteProcedure(deletedate) { var collection = getContext().getCollection(); var collectionLink = collection.getSelf
function bulkDeleteProcedure(deletedate) {
var collection = getContext().getCollection();
var collectionLink = collection.getSelfLink();
var response = getContext().getResponse();
var query = "SELECT * FROM c where c._ts = " + deletedate;
var responseBody = {
docs_deleted: 0,
continuation: true
};
// Validate input.
if (!query) throw new Error("The query is undefined or null.");
fetchData();
function fetchData(continuation) {
var requestOptions = {continuation: continuation};
var isAccepted = collection.queryDocuments(collectionLink, query, requestOptions, function (err, items, responseOptions) {
if (err) throw err;
// response.setBody(items);
if (items.length > 0) {
// Begin deleting documents as soon as documents are returned form the query results.
// tryDelete() resumes querying after deleting; no need to page through continuation tokens.
// - this is to prioritize writes over reads given timeout constraints.
tryDelete(items);
// response.setBody(items.length + " : inside retrvd docs");
} else if (responseOptions.continuation) {
// Else if the query came back empty, but with a continuation token; repeat the query w/ the token.
fetchData(responseOptions.continuation);
} else {
responseBody.continuation = false;
response.setBody(responseBody);
}
});
// If we hit execution bounds - return continuation: true.
if (!isAccepted) {
response.setBody(responseBody);
}
}
// Recursively deletes documents passed in as an array argument.
// Attempts to query for more on empty array.
function tryDelete(documents) {
if (documents.length > 0) {
// Delete the first document in the array.
var isAccepted = collection.deleteDocument(documents[0]._self, {}, function (err, responseOptions) {
if (err) throw err;
responseBody.deleted++;
documents.shift();
// Delete the next document in the array.
tryDelete(documents);
});
// If we hit execution bounds - return continuation: true.
if (!isAccepted) {
response.setBody(responseBody);
}
} else {
// If the document array is empty, query for more documents.
fetchData();
}
}
}
假设我的分区键是vehicle type,并且我的vehicle type值为01到10。根据我的要求,sql查询将返回具有10个不同分区键值的文档
当前的场景就像我必须通过每次提供每个分区键值来运行存储过程10次。
是否可以在一次运行中为不同的分区键值运行此存储过程
当前的场景就像我必须运行存储过程10次一样
通过每次提供每个分区的键值。能跑吗
此存储过程用于在单个分区中存储不同的分区键值
走
很遗憾,不能。不能为存储过程提供多个分区键。您将需要执行存储过程10次
您可以做的一件事是使用任何可用的SDK并编写代码在循环中执行存储过程。您可以创建一个分区键数组,并在其中循环,然后为该数组中的每个分区键执行存储过程。我使用intelliJ作为IDE,并用scala语言编写代码。我随身带着一组分区键。您能帮助我如何使用scala从intelliJ调用cosmosDb存储过程吗@高拉夫·曼特里