Javascript функции Azure (NodeJS) CosmosDB запрос - PullRequest
0 голосов
/ 14 декабря 2018

Очень простой вопрос.У меня есть следующая функция в моем файле index.js.

const databaseId = config.database.id;
const collectionId = config.collection.id;
const client = new CosmosClient({ endpoint: CosmosDBName, auth: { masterKey: CosmosDBKey } });
const query = `SELECT c.message.id FROM ${collectionId} c WHERE c.message.timestampFormatted > '${start}' AND c.message.timestampFormatted < '${end}'`;

queryCosmosDB(client, databaseId, collectionId, query)

async function queryCosmosDB(client, databaseId, collectionId, query, context) {
    const querySpec = {
        query: query,
        parameters: []
    };

    const { result: results } = await client.database(databaseId).container(collectionId).items.query(querySpec).toArray();

    for (var queryResult of results) {
        let resultString = JSON.stringify(queryResult);
        context.log(`\tQuery returned ${resultString}\n`);
    }
}

Если я выполню эту функцию, ответом будет следующая ошибка (я опустил некоторую бесполезную информацию)

ERROR: {"code":400,"body":"{\"code\":\"BadRequest\",\"message\":\"Cross partition query is required but disabled. Please set x-ms-documentdb-query-enablecrosspartition to true, specify x-ms-documentdb-partitionkey, or revise your query to avoid this exception. ...}

Теперь,Я получаю схему разделов, которую использует CosmosDB, но в моем случае, что было бы лучше всего сделать?Должен ли я как-то изменить запрос, и если да, то как?Если мне нужно вставить какую-нибудь строку запроса с несколькими разделами, как мне это сделать?

Единственный другой вопрос, который я нашел относительно этого, это вопрос этого SO , но я не управляю даннымион делает, так как я думаю, что SDK сильно изменился с полтора года назад.В настоящее время я использую этот учебник в качестве базового уровня.

Заранее большое спасибо за помощь!

1 Ответ

0 голосов
/ 14 декабря 2018

Вы можете просто включить перекрестные запросы, используя NodeJS sdk, предоставив его как часть параметров на функциональном уровне query.

async function queryCosmosDB(client, databaseId, collectionId, query, context) {
    const querySpec = {
        query: query,
        parameters: []
    };

    const options = {
        enableCrossPartitionQuery: true
      };

    const { result: results } = await client.database(databaseId).container(collectionId).items.query(querySpec, options).toArray();

    for (var queryResult of results) {
        let resultString = JSON.stringify(queryResult);
        context.log(`\tQuery returned ${resultString}\n`);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...