如何使用Azure门户清除Cosmos DB数据库或删除所有项目

yyyllmsg  于 2023-08-07  发布在  其他
关注(0)|答案(5)|浏览(199)

如果转到https://portal.azure.com,打开我们的Azure Cosmos DB帐户(1)--> Data Explorer(2)-->单击用户(3)-->单击新建SQL查询:
x1c 0d1x的数据
Azure将打开一个文本框以输入查询:



我发现Cosmos DB不允许使用DELETE而不是SELECT:https://stackoverflow.com/a/48339202/1198404,所以我应该这样做:

SELECT * FROM c DELETE c
SELECT * FROM c DELETE *

字符串
但我的尝试都没有奏效。

vu8f3i0k

vu8f3i0k1#

一个选项是在特定的Container上设置TTL为0,这取决于记录的数量,尽管这可能需要一点时间。
或者,这可能是一个更可行的选择,就是简单地删除并重新创建容器。

lymgl2op

lymgl2op2#

一个Cosmos DB数据库可以包含零个、一个或多个Container。容器储存项目。该层次结构被描述为here。我假设您要清除Container中的所有项目。
由于您的连接字符串的作用域是数据库级别的,因此我快速清除Container中所有项的方法是在数据库中删除并重新创建Container。
要删除Azure门户中的容器,请执行以下操作:
1.在门户的左侧菜单中,选择All resources ->,然后选择Cosmos DB资源以打开Cosmos DB管理刀片。
1.选择“数据总管”。您将看到您的数据库以及在其数据库下列出的每个Container。
1.选择要删除的容器。“突出显示容器的菜单项后,单击...容器名称的右侧。这将有一个弹出菜单,您可以在其中选择删除容器。
例如,如果容器名称为users:
x1c 0d1x的数据

rm5edbpk

rm5edbpk3#

您只能使用BulkExecutor进行批量删除,而不能从门户中进行批量删除,您一次只能从门户中删除一个项目。
我会以不同的方式处理环境设置。我建议您为每个环境创建单独的资源组,或者至少为生产环境创建另一个集合。关于资源组解决方案,以保持成本下降,只是拆除测试环境时,不使用。

h22fl7wq

h22fl7wq4#

可以添加删除存储过程以完全执行删除。

function bulkDeleteSproc(query) {
    var collection = getContext().getCollection();
    var collectionLink = collection.getSelfLink();
    var response = getContext().getResponse();
    var responseBody = {
        deleted: 0,
        continuation: true       
    };
    query='SELECT * FROM root r';

    // Validate input.
    if (!query) throw new Error("The query is undefined or null.");

    tryQueryAndDelete();

    function tryQueryAndDelete(continuation) {
        
        var requestOptions = {continuation: continuation};
        console.log(requestOptions);
        var isAccepted = collection.queryDocuments(collectionLink, query, requestOptions, function (err, retrievedDocs, responseOptions) {
            if (err) throw err;
              
            if (retrievedDocs.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(retrievedDocs);
            } else if (responseOptions.continuation) {
                // Else if the query came back empty, but with a continuation token; repeat the query w/ the token.
                tryQueryAndDelete(responseOptions.continuation);
            } else {
                // Else if there are no more documents and no continuation token - we are finished deleting documents.
                responseBody.continuation = false;
                response.setBody(responseBody);
            }
        });

        // If we hit execution bounds - return continuation: true.
        if (!isAccepted) {
            console.log("tryquerydelete not accepted");
            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++;
               console.log("hi");
                documents.shift();
               
                // Delete the next document in the array.
                tryDelete(documents);
                console.log(isAccepted);
            });

            // If we hit execution bounds - return continuation: true.
            if (!isAccepted) {
                console.log("trydelete not accepted");
                response.setBody(responseBody);
            }
        } else {
            // If the document array is empty, query for more documents.
            tryQueryAndDelete();
        }
    }
}

字符串

csga3l58

csga3l585#

要使用Azure门户删除所有项目,最好只删除包含项目的容器。
点击3个点


的数据
并删除容器


相关问题