从Cosmosdb Java获取文档跨分区查询是必需的,但已禁用

时间:2019-03-12 18:51:39

标签: java azure-cosmosdb azure-cosmosdb-sqlapi

checking

您好,我正在尝试使用上述代码使用Java从Cosmosdb检索文档时获得一些帮助。 我收到以下错误:

  

警告:将不会重试该操作。例外:交叉分区   查询为必填项,但已禁用。请设定   将x-ms-document-db-query-enablecrosspartition设置为true,指定   x-ms-documentdb-partitionkey,或修改查询以避免这种情况   例外。 ActivityId:09c62e77-f9dc-4cc7-902d-0cd8c5cad8a6,   Microsoft.Azure.Documents.Common / 2.2.0.0

您能为我提供的任何帮助将不胜感激! 谢谢

1 个答案:

答案 0 :(得分:0)

Document DB Java SDK API Document搜索了queryDocuments方法重载,这似乎与示例代码有些不同。我想您以错误的参数顺序设置了FeedOptions。请使用下面的代码,它对我有用。

import com.microsoft.azure.documentdb.*;

import java.util.List;

public class QueryDocumentsTest {

    static private String YOUR_COSMOS_DB_ENDPOINT = "https://***.documents.azure.com:443/";
    static private String YOUR_COSMOS_DB_MASTER_KEY="***";

    public static void main(String[] args) {

        DocumentClient client = new DocumentClient(
                YOUR_COSMOS_DB_ENDPOINT,
                YOUR_COSMOS_DB_MASTER_KEY,
                new ConnectionPolicy(),
                ConsistencyLevel.Session);

        FeedOptions queryOptions = new FeedOptions();
//        queryOptions.setMaxItemCount(10);
        queryOptions.setEnableCrossPartitionQuery(true);
        String id = "b01cf483-15e0-517c-deae-2e71bafe7d12";

        // Retrieve the document using the DocumentClient.
        List<Document> documentList = client
                .queryDocuments("dbs/db/colls/part",
                        "SELECT * FROM c WHERE c.id='" + id + "'",queryOptions)
                .getQueryIterable().toList();

        if (documentList.size() > 0) {
            System.out.println(documentList.get(0));
        } else {
            System.out.println("null");
        }

    }
}

输出:

enter image description here