如何指定无分区密钥来删除文档DB Java SDK中的文档?

2023-12-06

我只有一个集合,当我尝试使用以下代码删除文档时

    PartitionKey partitionKey = new PartitionKey("undefined");
    RequestOptions requestOptions=new RequestOptions();
    requestOptions.setPartitionKey(partitionKey);
    for(Document currentDocument: existingIMEIDevice){
        try {
            ConfigVariables.documentClient.deleteDocument(currentDocument.getSelfLink(), requestOptions);
        } catch (DocumentClientException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

它抛出异常。

com.microsoft.azure.documentdb.documentClientException:消息:{“ errors”:[“找不到资源”]} ActivityID:4353E7C0-0B24-4B2A-8EC6-FC2DB4059AA0,请求URI:/APPS/708ED403-166F-44E4-847F-CCAAA0CD222222222D9C/SERVICE 3FC6138-06A5-4876-A629- A4BE69917DED/REPLICAS/131533416718986721P,状态代码:NotFound 在com.microsoft.azure.documentdb.internal.errorutils.maybethrowexception(errorutils.java:69) 在com.microsoft.azure.documentdb.internal.gatewayproxy.performdeleterequest(gatewayproxy.java:187) 在com.microsoft.azure.documentdb.internal.gatewayproxy.dodelete(gatewayproxy.java:99) 在com.microsoft.azure.documentdb.internal.gatewayproxy.processmessage(gatewayproxy.java:332) 在com.microsoft.azure.documentdb.documentclient $ 7.apply(documentclient.java:2877) 在com.microsoft.azure.documentdb.internal.tryutility.executedocumentClientRequest(retryutility.java:58) 在com.microsoft.azure.documentdb.documentclient.dodelete(documentclient.java:2883) 在com.microsoft.azure.documentdb.documentclient.deletedocument(documentclient.java:956) 在com.moveinsync.centraldevices.persistance.azurecommdaoimpl.replacedocument(azurecommdaoimpl.java:45) 在com.moveinsync.centraldevices.persistance.azurecommdaoimpl.documentdbbulkinsert(azurecommdaoimpl.java:85) 在com.moveinsync.centraldevices.jobs.toazurejob.executeinternal(toazurejob.java:27) 在org.springframework.scheduling.quartz.quartzjobbean.execute(quartzjobbean.java:75) atorg.quartz.core.jobrunshell.run(jobrunshell.java:202) 请访问org.quartz.simpl.simplethreadpool $ workerthread.run(simplethreadpool.java:573) 如果我不提供请求,它要求我提供一个分区密钥。 我没有分区键,因为以下没有返回任何内容

SELECT c.partitionKey FROM c ORDER BY c.partitionKey

我该如何解决这个问题?


根据我的经验,如果您的集合没有分区密钥,则在操作数据库时无需设置分区密钥的查询标准。

在您的帖子中,该集合没有分区键,并且您将分区键设置为RequestOption。因此,数据库当然不知道在哪里可以找到要运行的文档。

您可以参考我的代码段:

import com.microsoft.azure.documentdb.*;

public class DeleteDocuments {
    private static String accountName="https://jay.documents.azure.com:443/";

    private static String accountKey="Czi66skfjZYLTaXuDhoxNb2JHL4DR98VxAxGXtLkWFnjCa5e7gUXQuPgemlXwyPWjjWJpwrseH1wPMfhkqA8cQ==";

    private static String databaseName = "db";

    private static String collectionName = "coll";

    public static void main(String[] args) throws DocumentClientException {

        DocumentClient client = new DocumentClient(
                accountName,
                accountKey
                , new ConnectionPolicy(),
                ConsistencyLevel.Session);

        FeedOptions options = null;
        String sql = "select * from c";
        FeedResponse<Document> queryResults  = client.queryDocuments("dbs/"+databaseName+"/colls/"+collectionName, sql, options);

        System.out.println("before delete :");
        for (Document d : queryResults.getQueryIterable()) {
            System.out.println(String.format("\tRead %s", d));
        }

        RequestOptions requestOptions = new RequestOptions();
        requestOptions.setOfferThroughput(400);

        client.deleteDocument("/dbs/"+databaseName+"/colls/"+collectionName+"/docs/1",requestOptions);

        queryResults  = client.queryDocuments("dbs/"+databaseName+"/colls/"+collectionName, sql, options);


        System.out.println("after delete :");

        for (Document d : queryResults.getQueryIterable()) {
            System.out.println(String.format("\tRead %s", d));
        }
    }
}

更新答案:

我认为你误解了partitionkey财产在options[].

例如,我的容器是这样创建的:

enter image description here

分区密钥是我在这里收藏的“名称”。您可以查看收集的分区密钥。

和我的文件如下:

{
    "id": "1",
    "name": "jay"
}

{
    "id": "2",
    "name": "jay2"
}

My partitionkey is 'name',所以在这里我有两个分区:'jay' and 'jay1'.

所以,这里你应该设置partitionkey属性为“jay”或“jay2”,而不是“name”。

此时,如果我运行下面的代码而不将分区键设置到 RequestOptions 中,我将遇到与您相同的问题。

  RequestOptions requestOptions = new RequestOptions();
  requestOptions.setOfferThroughput(400);

        client.deleteDocument("/dbs/"+databaseName+"/colls/"+collectionName+"/docs/1",requestOptions);

线程“main”中的异常 java.lang.UnsupportedOperationException: 必须为此操作提供 PartitionKey 值。在 com.microsoft.azure.documentdb.DocumentClient.addPartitionKeyInformation(DocumentClient.java:3199) 在 com.microsoft.azure.documentdb.DocumentClient.addPartitionKeyInformation(DocumentClient.java:3180) 在 com.microsoft.azure.documentdb.DocumentClient.deleteDocument(DocumentClient.java:959) 在DeleteDocuments.main(DeleteDocuments.java:32)

我需要将分区键参数设置为所操作文档存储的分区。

 RequestOptions requestOptions = new RequestOptions();
 requestOptions.setOfferThroughput(400);
 PartitionKey partitionKey = new PartitionKey("jay");
 requestOptions.setPartitionKey(partitionKey);

        client.deleteDocument("/dbs/"+databaseName+"/colls/"+collectionName+"/docs/1",requestOptions);

更新答案2:

我猜你想操作没有设置分区键的文件。

请参考这个完美blog,你会找到答案的!

在java代码中,只需将分区键设置为Undefined.Value()然后一切都会完成。

 RequestOptions requestOptions = new RequestOptions();
 requestOptions.setOfferThroughput(400);
 PartitionKey partitionKey = new PartitionKey(Undefined.Value());
 requestOptions.setPartitionKey(partitionKey);

        client.deleteDocument("/dbs/"+databaseName+"/colls/"+collectionName+"/docs/3",requestOptions);

希望对您有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何指定无分区密钥来删除文档DB Java SDK中的文档? 的相关文章

  • Grizzly 和 Servlet 容器上下文

    我试图在我编写的 在 Grizzly 上运行的 Servlet 中获取一些注入的上下文 例如 Session 或 HttpServletRequest 但我所做的似乎都不起作用 整个过程似乎过早地停止了 并出现以下错误 SEVERE Mis
  • 使用 Hibernate 或 Spring 打印 DBMS_OUTPUT.put_line

    我想知道 Hibernate 或 Spring 或任何第 3 方库是否提供将 DBMS OUTPUT put line 消息直接打印到 system out 或日志文件的能力 目的是在控制台中同时显示 PLSQL 日志消息和 java 日志
  • 如何在 Java 中根据 XSD 1.1 验证 XML?

    在 Java 中根据 XML Schema 1 1 验证 XML 文件的最佳方法是什么 我从中获取了代码tutorial http www ibm com developerworks xml library x javaxmlvalida
  • 使用 Java 检索 Window 进程的 CPU 使用率

    我正在寻找一个 Java 解决方案来查找 Windows 中正在运行的进程的 CPU 使用情况 查了一下网上 关于Java解决方案的信息似乎很少 请记住 我并不是要查找 JVM 的 CPU 使用情况 而是要查找当时在 Windows 中运行
  • JPA 为每个项目选择最新实例

    假设我有一个会议实体 每次会议都有一个与会者和一个会议日期 在我的会议表中 我可能为每个与会者举行多个会议 每个会议都有不同的日期 我需要一个 JPA 查询 该查询将为所有与会者仅选择最新的会议 例如 如果我的桌子看起来像这样 Meetin
  • java“类文件包含错误的类”错误

    我正在尝试制作一个控制台应用程序来测试我的网络服务 我成功部署了一个网络服务http localhost 8080 WS myWS http localhost 8080 WS myWS我用 wsimport 制作了代理类 wsimport
  • Stream#limit 返回的元素是否可以少于预期?

    如果流s下面至少有n元素 流在什么情况下sLimit可能少于n元素 如果有的话 Stream sLimit s limit n 提问原因 在这个答案 https stackoverflow com a 28082107 829571 我读到
  • 为什么这不会导致 NullPointerException?

    public class Null public static void greet System out println Hello world public static void main String args Null null
  • Java中通过FTP创建文件夹层次结构

    Java 是否有现成的功能可以在远程 FTP 服务器上创建文件夹层次结构 Apache Commons 确实提供了 FTP 客户端 但我找不到创建目录层次结构的方法 它确实允许创建单个目录 makeDirectory 但创建整个路径似乎并不
  • 使用java读取Excel工作表的单列

    我有一张 Excel 表格 我想编写一个方法 该方法将参数作为要读取的列号 并返回一个由该列中的所有数据组成的数组 然后将该列元素放置在 xml 工作表中 我怎样才能编写一个方法来做到这一点 使用 Apache POI 您可以在他们的使用页
  • 在 IntelliJ 中创建可执行 JAR(Java 18、JavaFX 18 Maven 项目),“警告:不支持的 JavaFX 配置...”

    我有一个 Java 18 JavaFX 18 Maven 项目 除了 javaFX 库之外 它还有很多库需要包含在工件中 我想创建一个工件 一个 jar 其中包含所有依赖项 我开始按照这个视频来创建 jar https www youtub
  • Jar Manifest 文件的使用混乱

    我正在阅读使用 jar 工具打包 java 应用程序 我注意到 META INF 目录下创建了一个清单文件 对于一个简单的应用程序来说 感觉它没有任何作用 我在 stackoverflow 上搜索以了解 Manifest 文件的用法 我碰到
  • 如何映射 Map

    I tried ManyToMany cascade CascadeType ALL Map
  • Google App Engine数据存储区字符串编码问题

    你好 我正在使用 Google App Engine 进行一个项目 并且需要存储一些字符串 我正在使用 Java 和JDOHelper getPersistenceManagerFactory transactions optional 在
  • Java 中的可迭代求和?

    有没有一个库可以做到这一点 public class Iterables private Iterables public static
  • JBoss 5 截断 base64 cookie 字符串的尾部 =

    从 JBoss 4 升级到 JBoss 5 后 我注意到最烦人的回归 它截断 base64 cookie 值的尾部等号 我花了很长时间才明白问题不是我的代码而是 JBoss 的 我用 google 搜索了一下 发现这是一个已知的问题issu
  • Web 应用程序似乎启动了名为 [22] 的线程,但未能停止它。这很可能造成内存泄漏

    我有一个 Web 应用程序 后端有 Servlet 部署在 tomcat 上 该应用程序是简单的java应用程序 我经常在服务器日志中看到此错误 严重 Web 应用程序似乎启动了一个名为 22 但未能阻止它 这很有可能 造成内存泄漏 是否存
  • 如何手动添加Android Studio依赖

    我多次尝试向我的项目添加依赖项 但每次都会出现错误 我想添加它们的依赖项是 de hdodenhof circleimageview 1 3 0 and com github bumptech glide glide 3 6 1 所以我想下
  • 如何使用 AEM 解析 org.apache.http.ssl?

    最终 我尝试在 Java 代码中使用 AWS S3 库来通过 AEM 启用服务器端 S3 上传 但在安装依赖项和 或由 AEM 识别时遇到了问题 每次我添加新的依赖项时 都会弹出五个问题 在我尝试构建的这个包中 这是我看到的错误 The i
  • 生成签名和加密的 JWT

    我正在尝试使用生成签名和加密的 JWT 令牌雨云智威汤逊 http connect2id com products nimbus jose jwt private void generateToken throws JOSEExceptio

随机推荐