В функциях Azure запустите запрос Cosmos DB в коде

#azure #azure-functions #azure-cosmosdb

#azure #azure-функции #azure-cosmosdb

Вопрос:

Могу ли я запустить запрос Cosmos DB в самом коде? Все, что я мог бы сделать прямо сейчас, это выполнить запрос перед запуском кода (ввод). Что мне нужно, так это сначала запустить некоторый код, а затем получить данные в cosmos DB. Как мне это сделать с помощью javascript?

Комментарии:

1. Вы хотели, чтобы какой-нибудь подобный код выполнял запрос без ввода cosmos db? bradygaster.com/azure-cosmosdb-with-functions-and-nodejs

Ответ №1:

При использовании привязки ввода есть возможность (но только для C #) получить DocumentClient, который можно использовать для выполнения любого запроса или операции.

Если ваше ограничение выполняется на JavaScript, вы, безусловно, можете использовать Cosmos DB JS SDK непосредственно в своей функции вместо использования привязки ввода следующим образом:

 const cosmos = require('@azure/cosmos');
const endpoint = process.env.COSMOS_API_URL;
const masterKey = process.env.COSMOS_API_KEY;
const { CosmosClient } = cosmos;

const client = new CosmosClient({ endpoint, auth: { masterKey } });
// All function invocations also reference the same database and container.
const container = client.database("MyDatabaseName").container("MyContainerName");

module.exports = async function (context) {
    const querySpec = {
        query: "SELECT * FROM Families f WHERE  f.lastName = @lastName",
        parameters: [
          {
            name: "@lastName",
            value: "Andersen"
          }
        ]
    };

    const { result: results } = await container.items.query(querySpec).toArray();
    context.log(results);
}
 

COSMOS_API_URL и COSMOS_API_KEY должны быть переменными среды, указывающими на конечную точку учетной записи Azure Cosmos и главный ключ. Вы можете заменить имена базы данных и контейнера и при необходимости изменить запрос.

Ответ №2:

Вы можете обратиться к примеру кода по этой ссылке:

function.json:

 {
  "bindings": [
    {
      "name": "query",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "documentDB",
      "name": "documents",
      "databaseName": "<your-database-name>",
      "collectionName": "<your-collection-name>",
      "sqlQuery": "SELECT * FROM d WHERE d.name = {Name} and d.city = {City}",
      "connection": "<connectionstring-setting-name>",
      "direction": "in"
    }
  ],
  "disabled": false
}
 

код функции:

 module.exports = function (context, req) {
    var documents = context.bindings.documents;
    var totalDocuments = documents.length;
    context.log('Found '  totalDocuments  ' documents');

    if(totalDocuments === 0){
        context.res = {
            status: 404,
            body : "No documents found"
        };
    }
    else {
        context.res = {
            body: documents
        };
    }

    context.done();
};
 

Пожалуйста, обратите внимание: приведенный выше код работает для конфигурации привязки Azure Function V1.

введите описание изображения здесь