Функции Azure JavaScript function.json привязка данных маршрута с плавающей точкой - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь использовать привязку данных JavaScript-функции Azure к базе данных Cosmos, используя sqlQuery с параметром float в предложении where.

Вот мое определение привязки из function.json:

Не работает, не возвращает результатов. Я полагаю, что широта / долгота обрабатываются как строки:

  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "route": "GetLoq/{lat:float}/{lon:float}"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    },
    {
      "type": "cosmosDB",
      "name": "doc",
      "databaseName": "%CosmosDBNAME%",
      "collectionName": "%CosmosCollectionNAME%",
      "sqlQuery": "SELECT * FROM c where c.location.coordinates = [{lat}, {lon}]",
      "connectionStringSetting": "DB",
      "direction": "in"
    }
  ]

Работает, когда я жестко кодирую значения (для сравнения):

  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "route": "GetLoq/{lat:float}/{lon:float}"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    },
    {
      "type": "cosmosDB",
      "name": "doc",
      "databaseName": "%CosmosDBNAME%",
      "collectionName": "%CosmosCollectionNAME%",
      "sqlQuery": "SELECT * FROM c where c.location.coordinates = [36.71, 3.25]",
      "connectionStringSetting": "DB",
      "direction": "in"
    }
  ]

1 Ответ

0 голосов
/ 21 ноября 2018

Запрос не работает, поскольку он ищет строковое значение ["36.71", "3.25"] вместо числа с плавающей запятой.

Проблема еще не решена.

Ограничения маршрута позволяют указывать типы данных для параметров строки запроса в свойстве маршрута HttpTrigger.Эти ограничения используются только для соответствия маршруту.При использовании параметров привязки тип данных преобразуется в строки.

Мы должны создать UDF toFloat (щелкните значок опции рядом с коллекцией> Новый UDF), чтобы сначала преобразовать строку в плавающее.

function stringToFloatUDF(input){
    return parseFloat(input);
}

Затем измените sqlQuery с помощью UDF.

"sqlQuery": "SELECT * from c where c.location.coordinates = [udf.toFloat({lat}), udf.toFloat({lon})]",
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...