Невозможно сделать запрос к базе данных Cosmos, используя числовой ключ раздела - PullRequest
1 голос
/ 25 апреля 2019

Я пытаюсь использовать числовое поле в качестве ключа раздела, но не могу запустить хранимые процедуры для них.Я не уверен, что делаю что-то не так или это невозможно.

У меня есть две коллекции с двумя разными ключами раздела.

Образец документа из коллекции 1

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

Образец документа из коллекции 2

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

Разница в том, что поле группы во второй коллекции не имеет двойных кавычек.

Обе коллекции имеют группу в качествеключ раздела, и я пытаюсь выполнить пример хранимой процедуры, представленной на портале Azure для Cosmos DB.

Хотя я могу успешно запустить первую коллекцию, вторая коллекция выдает ошибку «документы не найдены» .

second collection

first collection

Я импортирую данные из базы данных сервера sql, и поля intимпортируется без двойных кавычек.Я довольно много искал, но не смог найти документацию, касающуюся числового ключа раздела без двойных кавычек.

Можно ли сделать ключи раздела из числовых полей ??Любая помощь, оцененная как это поле, лучше всего подходит для моей коллекции для разбиения на разделы и будет очень полезна.

1 Ответ

0 голосов
/ 26 апреля 2019

Пожалуйста, не беспокойтесь о числовом ключе разделения, который определенно поддерживается в хранимой процедуре cosmos db.Вы все сделали правильно. Вы получили неожиданные результаты, поскольку портал Azure идентифицирует ввод ключа раздела как тип 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

...