当前位置: 首页 > 知识库问答 >
问题:

Azure Cosmos DB -删除整个分区

陈斌
2023-03-14

我是cosmos Db的新手,需要删除一个完整的分区。在做了一个简短的研究后,我发现drop分区不是一件事。因此,我偶然发现了以下链接,这是一个用于批量删除的存储过程

https://github.com/Azure/azure-cosmosdb-js-server/blob/master/samples/stored-procedures/bulkDelete.js

我在我的集合上创建了这个存储过程,然后单击执行

我输入了分区键和输入参数“从c中选择*”。但是,我可以看到一次只删除38个文档,并且查询成功完成。是否存在强制存储过程过早停止的设置?

共有2个答案

公孙宏畅
2023-03-14

如果要创建上述存储过程,请确保在执行时提供分区键的值,而不是分区键的名称列。

此外,Cosmos DB存储过程一次只能在一个分区中运行,并且与您在Input(分区键值)中传递的相同。

赫连靖琪
2023-03-14

正如您在评论中提到的,您的情况取决于分配的RU。我为您提供了以下示例存储过程code.You可以参考它。

function deleteSproc(query) {
    var collection = getContext().getCollection();
    var collectionLink = collection.getSelfLink();
    var response = getContext().getResponse();
    var responseBody = {
        deleted: 0,
        continuation: ""
    };

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

    tryQueryAndDelete();

    function tryQueryAndDelete(continuation) {
        var requestOptions = {
            continuation: continuation, 
            pageSize: 10
        };

        var isAccepted = collection.queryDocuments(collectionLink, query, requestOptions, function (err, documents, responseOptions) {
            if (err) throw err;

            if (documents.length > 0) {
                tryDelete(documents);
                if(responseOptions.continuation){
                    tryQueryAndDelete(responseOptions.continuation);
                }else{
                    response.setBody(responseBody);
                }

            }
        });

        if (!isAccepted) {
            response.setBody(responseBody);
        }
    }

    function tryDelete(documents) {
        if (documents.length > 0) {
            var requestOptions = {etag: documents[0]._etag};

            // Delete the document.
            var isAccepted = collection.deleteDocument(
                documents[0]._self, 
                requestOptions, 
                function (err, updatedDocument, responseOptions) {
                    if (err) throw err;

                    responseBody.deleted++;
                    documents.shift();
                    // Try updating the next document in the array.
                    tryDelete(documents);
                }
            );

            if (!isAccepted) {
                response.setBody(responseBody);
            }
        } 
    }
}

此外,据我所知,存储过程有5秒的执行限制。如果崩溃为超时错误,则可以将延续令牌作为参数传递到存储过程中,并多次执行存储过程

有任何顾虑,请告诉我。谢谢你。

 类似资料:
  • 我正在学习如何制作android应用程序,从一些琐碎的任务开始,比如在屏幕上绘制图形,但当我移除背景色(白色)时,它只是移除整个图形,让它完全变成白色。 我在我的android上看到的只是一个黑屏和一个白框(我的问题) 我是不是漏掉了什么?还是做错了什么?

  • 我遵循此处的指南从firebase数据库中删除值。这是我的数据结构。 这是我正在使用的代码。 发生的情况是,在这个调用中删除了整个/bookmarks节点,而不仅仅是对所需书签的引用。如何实现只删除一个书签而不是删除整个节点?

  • 问题内容: 我有一个超过mysql数据库的价值。我制作了几个customcolumn渲染器,以显示所需格式的数据。我现在需要的是在某些行上添加删除线,具体取决于每行最后一个单元格(5)上的值是否具有特定的字符串值(例如test)。删除线必须位于该行的每个单元格中,最后一个单元格除外(具有测试值)。它可以与其他自定义列渲染器一起使用而不会混淆吗? 谢谢! 问题答案: 为什么是HTML,为什么不直接使

  • 本文向大家介绍js实现按一下删除键删除整个单词附demo,包括了js实现按一下删除键删除整个单词附demo的使用技巧和注意事项,需要的朋友参考一下 在文本框倒叙输入一文中提到了设置文本框焦点的javascript代码,今天就使用这段代码来做一个Demo。内容就是当删除单词时就一次性删除整个单词,如图所示: 下面我把示例代码贴上:

  • 假设我们在 “contact-form” 分支上的工作已经完成了。并且我们也已经把最终的改动整合到了 “master” 分支。现在我们就不再需要这个分支了。把它删除掉吧: $ git branch -d contact-form 为了保持一致,我们也有必要删除它所对应的远程分支。附加上一个 “-r” 参数就可以了: $ git branch -dr origin/contact-form

  • 我是Postgresql的新手,不知道如何管理分区表 我有基于日期的分区表。在插入数据之前,触发器检查日期并将其放入相应的子表中 例如 2014年11月15日-插入名为11-15-2014_log的表格 2014年11月16日-插入名为11-16-2014_log的表格 现在我想创建一个函数来删除旧的子表,例如,超过90天的表。我应该根据表名查找并删除子表(因为它包含创建日期),还是应该在主表中查