Door gebruikers gedefinieerde functies maken

Voltooid

Door de gebruiker gedefinieerde functies (UDF's) worden gebruikt om de grammatica van de querytaal van Azure Cosmos DB for NoSQL uit te breiden en aangepaste bedrijfslogica te implementeren. UDF's kunnen alleen vanuit query's worden aangeroepen wanneer ze de SQL-querytaal verbeteren en uitbreiden.

Notitie

UDF's hebben geen toegang tot het contextobject en zijn bedoeld om te worden gebruikt als alleen-rekencode

Hier volgt een voorbeeld van een JSON-document voor een product met een naam en een prijseigenschap.

{
  "name": "Black Bib Shorts (Small)",
  "price": 80.00
}

Een eenvoudige SQL-query om de gegevens op te halen uit een container met veel items zoals deze, zou worden samengesteld om beide velden op te nemen.

SELECT 
    p.name,
    p.price
FROM
    products p

UDF's breiden de SQL-querytaal uit door u kleine gebieden te geven waar u eenvoudige bedrijfslogica in een query kunt injecteren. Laten we dit voorbeeld nemen en een door de gebruiker gedefinieerde functie maken om bedrijfsbelasting toe te passen. In ons voorbeeldscenario willen we een belasting van 15% toepassen en eindigen met een ideale resultatenset met een derde prijsWithTax-eigenschap .

[
  {
    "name": "Black Bib Shorts (Small)",
    "price": 80.00,
    "priceWithTax": 92.00
  }
]

Een door de gebruiker gedefinieerde functie wordt gedefinieerd als een JavaScript-functie die een of meer scalaire invoer[s] inneemt en vervolgens een scalaire waarde als uitvoer retourneert.

function name(input) {
    return output;
}

In dit voorbeeld wordt ervan uitgegaan dat de scalaire invoer een getal is dat vervolgens wordt vermenigvuldigd met 1,15 om 15% belasting toe te voegen.

function addTax(preTax) {
    return preTax * 1.15;
}

De bijgewerkte query bevat een derde geprojecteerd veld dat verwijst naar de udf-functie met behulp van de udf.addTax() syntaxis die in het veld p.price wordt doorgegeven als invoerparameter en de uitvoer van dat veld aliast naar de naam priceWithTax.

SELECT 
    p.name,
    p.price,
    udf.addTax(p.price) AS priceWithTax
FROM
    products p