无法使用数字分区键查询Cosmos DB

时间:2019-04-25 19:46:39

标签: stored-procedures key azure-cosmosdb partition

我试图将数字字段用作分区键,但是无法在它们上运行存储过程。我不确定自己是在做错什么还是不可能。

我有两个具有两个不同分区键的集合。

集合1中的示例文档

{
 "id":"1",
 "group": "a"
}

集合2中的样本文档

{
 "id":"1",
 "group": 1
}

区别在于第二个集合中的group字段周围没有双引号。

这两个集合都将组作为分区键,我正在尝试执行Azure Cosmos DB门户中提供的示例存储过程。

虽然我能够成功运行第一个集合,但第二个集合会产生错误“找不到文档”

second collection

first collection

我正在从sql server数据库中导入数据,并且int字段被导入而没有双引号。我进行了大量搜索,但找不到没有双引号的数字分区键相关文档。

是否可以从数字字段中进行分区键?任何赞赏的帮助,因为此字段最适合我的分区集合,并且非常有用。

1 个答案:

答案 0 :(得分:0)

请不要担心cosmos db存储过程绝对支持的数字分区键。您所做的一切都正确无误。您遇到了意外的结果,因为即使您填写了String类型,azure门户也将分区键输入识别为Number类型。

enter image description here

您可以使用cosmos db sdk或rest api对其进行测试。例如,java sdk示例如下:

import com.microsoft.azure.documentdb.*;

public class ExecuteSPTest {

    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) throws DocumentClientException {

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

        RequestOptions options = new RequestOptions();
        PartitionKey partitionKey = new PartitionKey(1);
        options.setPartitionKey(partitionKey);

        StoredProcedureResponse queryResults = client.executeStoredProcedure(
                "/dbs/db/colls/group/sprocs/sample",
                options,
                null);

        String document = queryResults.getResponseAsString();

        System.out.println(document);

    }
}

输出:

enter image description here