Nyckelord i Azure Cosmos DB för NoSQL

GÄLLER FÖR: NoSQL

Frågespråket för Azure Cosmos DB för NoSQL innehåller en uppsättning reserverade nyckelord som används i frågor för utökade funktioner.

BETWEEN

Nyckelordet BETWEEN utvärderas till ett booleskt värde som anger om målvärdet ligger mellan två angivna värden, inklusive .

Du kan använda nyckelordet BETWEEN med en WHERE -sats för att uttrycka frågor som filtrerar resultat mot strängintervall eller numeriska värden. Följande fråga returnerar till exempel alla objekt där priset ligger mellan 17.25 och 25.50, återigen inklusivt.

SELECT VALUE
    p.price
FROM
    products p
WHERE
    p.price BETWEEN 17.25 AND 25.50
[
  20
]

Du kan också använda nyckelordet BETWEENSELECT i -satsen, som i följande exempel.

SELECT 
    (p.price BETWEEN 0 AND 10) AS booleanLessThanTen,
    p.price
FROM
    products p
[
  {
    "booleanLessThanTen": false,
    "price": 20.0
  },
  {
    "booleanLessThanTen": true,
    "price": 7.5
  }
]

Anteckning

I API:et för NoSQL, till skillnad från ANSI SQL, kan du uttrycka intervallfrågor mot egenskaper av blandade typer. Kan till exempel price vara ett tal som 5.0 i vissa objekt och en sträng som fifteenDollars i andra. I dessa fall, som det är i JavaScript, resulterar jämförelsen mellan de två olika typerna i undefined, så objektet hoppas över.

DISTINKTA

Nyckelordet DISTINCT eliminerar dubbletter i det projicerade frågeresultatet.

I det här exemplet gäller frågeprojektvärdena för varje produktkategori. Om två kategorier är likvärdiga returneras endast en enda förekomst i resultatet.

SELECT DISTINCT VALUE
    p.category
FROM
    products p
[
  "Accessories",
  "Tools"
]

Du kan också projicera värden även om målfältet inte finns. I det här fallet finns inte fältet i något av objekten, så frågan returnerar ett tomt objekt för det specifika unika värdet.

SELECT DISTINCT
    p.category
FROM
    products p

Resultatet är:

[
  {},
  {
    "category": "Accessories"
  },
  {
    "category": "Tools"
  }
]

LIKE

Returnerar ett booleskt värde beroende på om en specifik teckensträng matchar ett angivet mönster. Ett mönster kan innehålla vanliga tecken och jokertecken.

Tips

Du kan skriva logiskt likvärdiga frågor med hjälp av nyckelordet LIKE eller RegexMatch systemfunktionen. Du ser samma indexanvändning oavsett vilket alternativ du väljer. Valet av vilket alternativ som ska användas baseras till stor del på syntaxinställningen.

Anteckning

Eftersom LIKE kan använda ett index bör du skapa ett intervallindex för egenskaper som du jämför med .LIKE

Du kan använda följande jokertecken med LIKE:

Beskrivning Exempel
% Valfri sträng med noll eller flera tecken. WHERE c.description LIKE "%SO%PS%"
_(understreck) Alla enskilda tecken. WHERE c.description LIKE"%SO_PS%"
[ ] Ett enskilt tecken inom angivet intervall ([a-f]) eller angivet ([abcdef]). WHERE c.description LIKE "%SO[t-z]PS%"
[^] Ett enskilt tecken som inte ligger inom det angivna intervallet ([^a-f]) eller angivet ([^abcdef]). WHERE c.description LIKE "%SO[^abc]PS%"

Tecknet % matchar valfri sträng med noll eller flera tecken. Genom att till exempel placera en % i början och slutet av mönstret returnerar följande fråga alla objekt där det angivna fältet innehåller frasen som en delsträng:

SELECT VALUE
    p.name
FROM
    products p
WHERE
    p.name LIKE "%driver%"

Om du bara använde ett % tecken i slutet av mönstret skulle du bara returnera objekt med en beskrivning som började med fruit:

SELECT VALUE
    p.name
FROM
    products p
WHERE
    p.name LIKE "%glove"

På samma sätt indikerar jokertecknet i början av mönstret att du vill matcha värden med det angivna värdet som ett prefix:

SELECT VALUE
    p.name
FROM
    products p
WHERE
    p.name LIKE "Road%"

Nyckelordet NOT inverterar resultatet av LIKE nyckelordets uttrycksutvärdering. Det här exemplet returnerar alla objekt som inte matchar uttrycket LIKE .

SELECT VALUE
    p.name
FROM
    products p
WHERE
    p.name NOT LIKE "%winter%"

Du kan söka efter mönster som innehåller ett eller flera jokertecken med hjälp av ESCAPE -satsen. Om du till exempel vill söka efter beskrivningar som innehåller strängen 20%vill du inte tolka som % ett jokertecken. Det här exemplet tolkar ^ som escape-tecknet så att du kan undvika en specifik instans av %.

SELECT VALUE
    p.name
FROM
    products p
WHERE
    p.description LIKE "%20^%%" ESCAPE "^"

Du kan omsluta jokertecken inom hakparenteser för att behandla dem som literaltecken. När du omger ett jokertecken inom hakparenteser tar du bort eventuella särskilda attribut. Den här tabellen innehåller exempel på literaltecken.

Parsat värde
LIKE "20-30[%]" 20-30%
LIKE "[_]n" _n
LIKE "[ [ ]" [
LIKE "]" ]

IN

Använd nyckelordet IN för att kontrollera om ett angivet värde matchar något värde i en lista. Följande fråga returnerar till exempel alla objekt där kategorin matchar minst ett av värdena i en lista.

SELECT
    *
FROM
    products p
WHERE
    p.category IN ("Accessories", "Clothing")

Tips

Om du inkluderar partitionsnyckeln IN i filtret filtreras frågan automatiskt till endast relevanta partitioner.

TOPP

Nyckelordet TOP returnerar det första N antalet frågeresultat i en odefinierad ordning. Vi rekommenderar att du använder TOP med ORDER BY -satsen för att begränsa resultatet till det första N antalet ordnade värden. Att kombinera dessa två satser är det enda sättet att på ett förutsägbart sätt ange vilka rader TOP som påverkar.

Du kan använda TOP med ett konstant värde, som i följande exempel, eller med ett variabelvärde med hjälp av parametriserade frågor.

SELECT TOP 10
    *
FROM
    products p
ORDER BY
    p.price ASC