#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.