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

如何在document DB java sdk中指定删除文档的NONE分区键?

那鹏
2023-03-14
    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();
        }
SELECT c.partitionKey FROM c ORDER BY c.partitionKey

共有1个答案

终安和
2023-03-14

根据我的经验,如果您的集合没有分区键,则在操作数据库时不需要设置分区键的查询条件。

在post中,集合没有分区键,您将分区键设置为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));
        }
    }
}
{
    "id": "1",
    "name": "jay"
}

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

我的partitionkey是'name',所以这里有两个解析:'jay'和'jay1'。

因此,这里应该将PartitionKey属性设置为'jay'或'jay2',而不是'name'。

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

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

        client.deleteDocument("/dbs/"+databaseName+"/colls/"+collectionName+"/docs/1",requestOptions);
 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:

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

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

 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);
 类似资料:
  • 问题内容: 我创建具有指定文档类型“ mytype”的索引“ myindex”。我可以删除索引,但是似乎“ mytype”仍然存在而没有与索引绑定。 如何摆脱“ mytype”? 问题答案: 如果您确实删除了索引,则该索引中的映射将不再存在。集群中是否还有其他具有相似类型名称的索引? 要回答问题:,请使用Delete Mapping API : 编辑 :从elasticsearch 2.0,将不再

  • 我想删除我的elasticsearch上_type=varning-Request的所有文档。我安装了按查询删除插件(https://www.elastic.co/guide/en/elasticsearch/plugins/2.0/plugins-delete-by-query.html) 我确实删除了http://localhost:9200/logstash*/_查询 没关系 卷曲http:

  • 通过指定文档的 /index/type/id 路径可以删除文档: $params = [ 'index' => 'my_index', 'type' => 'my_type', 'id' => 'my_id' ]; // Delete doc at /my_index/my_type/my_id $response = $client->delete($params);

  • 我正在使用mongodb atlas,我已经建立了一个值。以下是用户收集的示例文档详细信息。 我试图显示除一个文档外的所有文档。 我已经显示了除测试之外的所有值_id:ObjectId(“5f7f193585d5f70c177f6d27”)在项目集合中。但我不能。 你能帮我解决这个问题吗。提前谢谢。

  • 当我试图在MongoDB中删除集合中的文档时。它没有删除,因为集合已被封顶。我的问题是为什么?在这种情况下,是否有解决方案或其他功能可以删除文档?