Próbuję użyć powiązania danych JavaScript Azure Function do Cosmos DB przy użyciu sqlQuery z parametrem float w klauzuli where.

Oto moja definicja powiązania z function.json:

Nie działa, nie zwraca żadnych wyników, jak sądzę, ponieważ szerokość/długość są traktowane jako ciągi:

  "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"
    }
  ]

Działa, gdy koduję wartości na stałe (dla porównania):

  "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"
    }
  ]
0
rwrdb 21 listopad 2018, 04:40

1 odpowiedź

Najlepsza odpowiedź

Zapytanie nie działa, ponieważ wyszukuje wartość ciągu ["36.71", "3.25"] zamiast liczby zmiennoprzecinkowej.

Istnieje problem, który nie został jeszcze rozwiązany.

Ograniczenia trasy umożliwiają określanie typów danych dla parametrów ciągu zapytania we właściwości trasy HttpTrigger. Te ograniczenia są używane tylko do dopasowania trasy. Podczas korzystania z parametrów wiązania typ danych jest konwertowany na ciągi.

Musimy najpierw utworzyć UDF toFloat (kliknij ikonę więcej opcji obok kolekcji > Nowy UDF), aby najpierw przekonwertować ciąg na pływający.

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

Następnie zmodyfikuj sqlQuery za pomocą UDF.

"sqlQuery": "SELECT * from c where c.location.coordinates = [udf.toFloat({lat}), udf.toFloat({lon})]",
1
Jerry Liu 21 listopad 2018, 06:25