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

问题描述 投票:1回答:1

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

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

来自集合1的示例文档

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

来自集合2的示例文档

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

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

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

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

second collection

first collection

我从sql server数据库导入数据,导入的int字段没有双引号。我搜索了很多,但没有双引号找不到与数字分区键有关的文档。

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

stored-procedures key azure-cosmosdb partition
1个回答
0
投票

请不要担心cosmos db存储过程中明确支持的数字分区键。你做的一切都是正确的。你遇到了意想不到的结果,因为azure portal将分区键输入识别为String类型,即使你填充了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

© www.soinside.com 2019 - 2024. All rights reserved.