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

使用多个分区键从Azure cosmos DB集合中删除文档

微生智刚
2023-03-14

我必须通过 Azure 门户从 azure cosmos DB 中删除一些文档。我在容器中编写了一个存储过程,它将删除必须删除的数据。但是在执行存储过程时,它将要求提供分区键值。我必须删除具有不同分区键的文档。

下面给出了使用的存储过程。

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();
        }
    }

}

假设我的分区键是车辆类型,并且我的车辆类型值为01到10。根据我的要求,sql查询将返回具有10个不同分区键值的文档。

当前方案就像我必须通过每次提供每个分区键值来运行存储过程 10 次。是否可以一次性为不同的分区键值运行此存储过程?

共有1个答案

谢英光
2023-03-14

当前方案就像我必须通过每次提供每个分区键值来运行存储过程 10 次。是否可以一次性为不同的分区键值运行此存储过程?

不幸的是,不能。您不能为存储过程提供多个分区密钥。您需要执行存储过程10次。

您可以做的一件事是使用任何可用的SDK并编写代码在循环中执行存储过程。您可以创建一个分区键数组并循环该数组,并为该数组中的每个分区键执行存储过程。

 类似资料:
  • 本文向大家介绍如何使用Java从集合中删除多个文档?,包括了如何使用Java从集合中删除多个文档?的使用技巧和注意事项,需要的朋友参考一下 在Java中,com.mongodb.client.MongoCollection接口提供了方法deleteMany()。使用此方法,您可以一次从集合中删除多个文档,为此,您需要通过指定删除条件的过滤器。 示例 输出结果

  • 我知道如何。。。 删除单个文档。 但我不知道如何删除Mongoose收藏中的所有文档。我想在用户单击按钮时执行此操作。我假设我需要向某个endpoint发送AJAX请求并让该endpoint进行删除,但我不知道如何在endpoint处处理删除。 在我的例子中,我有一个集合,我想在用户单击按钮时删除所有文档。 api/datetime/index.js API/datetime/datetime.c

  • 问题内容: 我在Web应用程序中通过Hibernate使用JPA。这是两个实体(仅显示吸气剂): 如您所见,并称为“一对多”。 现在,我需要加载一个实例,删除部分或全部子代并保存更改。以下是对我不起作用的代码: 在上面的示例中未删除子实体。现在,我必须手动为每个孩子打电话。 有没有更简单的方法来管理子代? 请注意,我不想使用特定于Hibernate的功能,只能使用纯JPA。 问题答案: 对于JPA

  • 我如何删除一个特定的文档中的一个集合在fiRecovery使用反应? 我在这里和谷歌上看了看,但我没有发现任何内在相关的东西。 我只是设法从我的集合中删除索引[0]的文档。 这状态idDoc接收所有id文档。 如果我只是传递. doc(idDoc),我会得到以下错误: Firebase Error: Function Collection Reference.doc()要求它的第一个参数是非空字符

  • 从Spark中删除分区的替代方案是什么?有另一个实现来做到这一点? 谢了。

  • 问题内容: 我想使用gson删除具有空集合或空值的属性。 我打印json,我有这个: 例如,对于该json,我不想拥有集合aiAvisos,有一种方法可以将其从json中删除。我实际上正在处理很多集合,在这里我展示了一个集合,我确实需要从json中删除它们。 我需要这样的东西: 我尝试将集合设置为null,我检查了文档,也没有方法… 请任何建议。 非常感谢阅读本文的人! 问题答案: 遵循的步骤: