Dela via


Nyckelord i Azure Cosmos DB för NoSQL

GÄLLER FÖR: NoSQL

Azure Cosmos DB för NoSQL:s frågespråk 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 är mellan 17.25 och 25.50, återigen inkluderande.

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

Du kan också använda nyckelordet BETWEEN SELECT 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
  }
]

Kommentar

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.

TYDLIG

Nyckelordet DISTINCT eliminerar dubbletter i det projicerade frågeresultatet.

I det här exemplet projekterar frågan värden för varje produktkategori. Om två kategorier är likvärdiga returnerar endast en enskild 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 fältet inte 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"
  }
]

Tycka om

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.

Dricks

Du kan skriva logiskt likvärdiga frågor med hjälp av antingen 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ällningar.

Kommentar

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 fler tecken. WHERE c.description LIKE "%SO%PS%"
_(understreck) Alla enskilda tecken. WHERE c.description LIKE"%SO_PS%"
[ ] Ett enskilt tecken inom det angivna intervallet ([a-f]) eller uppsättningen ([abcdef]). WHERE c.description LIKE "%SO[t-z]PS%"
[^] Ett enskilt tecken ligger inte inom det angivna intervallet ([^a-f]) eller uppsättningen ([^abcdef]). WHERE c.description LIKE "%SO[^abc]PS%"

Tecknet % matchar valfri sträng med noll eller fler 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 anger 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 LIKE uttrycket.

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 det % som ett jokertecken. Det här exemplet tolkar ^ som escape-tecknet så att du kan undkomma 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")

Dricks

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 förutsäga 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