Condividi tramite


Parole chiave in Azure Cosmos DB per NoSQL

SI APPLICA A: NoSQL

Il linguaggio di query di Azure Cosmos DB per NoSQL include un set di parole chiave riservate usate nelle query per le funzionalità estese.

BETWEEN

La BETWEEN parola chiave restituisce un valore booleano che indica se il valore di destinazione è compreso tra due valori specificati, inclusi.

È possibile usare la BETWEEN parola chiave con una WHERE clausola per esprimere query che filtrano i risultati in base a intervalli di valori stringa o numerici. Ad esempio, la query seguente restituisce tutti gli elementi in cui il prezzo è compreso tra 17.25 e 25.50, di nuovo inclusivo.

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

È anche possibile usare la parola chiave BETWEENnella clausola SELECT, come nell'esempio seguente.

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

Nota

Nell'API per NoSQL, a differenza di ANSI SQL, è possibile esprimere query di intervallo su proprietà di tipi misti. Ad esempio, price potrebbe essere un numero come 5.0 in alcuni elementi e una stringa come fifteenDollars in altri. In questi casi, così com'è in JavaScript, il confronto tra i due tipi diversi restituisce undefined, quindi l'elemento viene ignorato.

DISTINCT

La DISTINCT parola chiave elimina i duplicati nei risultati della query proiettati.

In questo esempio i valori dei progetti di query per ogni categoria di prodotto. Se due categorie sono equivalenti, nei risultati viene restituita solo una singola occorrenza.

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

È anche possibile proiettare i valori anche se il campo di destinazione non esiste. In questo caso, il campo non esiste in uno degli elementi, quindi la query restituisce un oggetto vuoto per tale valore univoco specifico.

SELECT DISTINCT
    p.category
FROM
    products p

I risultati sono:

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

LIKE

Restituisce un valore booleano a seconda che una stringa di caratteri specifica corrisponda a un criterio specificato. Il modello può contenere caratteri specifici e caratteri jolly.

Suggerimento

È possibile scrivere query equivalenti logicamente usando la LIKE parola chiave o la funzione di RegexMatch sistema. Si osserverà lo stesso utilizzo dell'indice indipendentemente dall'opzione scelta. La scelta di quale opzione usare si basa in gran parte sulla preferenza di sintassi.

Nota

Poiché LIKE può utilizzare un indice, è necessario creare un indice di intervallo per le proprietà che si stanno confrontando tramite LIKE.

È possibile usare i caratteri jolly seguenti con LIKE:

Descrizione Esempio
% Stringa composta da zero o più caratteri. WHERE c.description LIKE "%SO%PS%"
_(sottolineatura) Carattere singolo. WHERE c.description LIKE"%SO_PS%"
[ ] Qualsiasi carattere singolo all'interno dell'intervallo specificato ([a-f]) o impostato ([abcdef]). WHERE c.description LIKE "%SO[t-z]PS%"
[^] Qualsiasi carattere singolo non compreso nell'intervallo specificato ([^a-f]) o impostato ([^abcdef]). WHERE c.description LIKE "%SO[^abc]PS%"

Il carattere % corrisponde a qualsiasi stringa composta da zero o più caratteri. Ad esempio, inserendo un oggetto % all'inizio e alla fine del criterio, la query seguente restituisce tutti gli elementi in cui il campo specificato contiene la frase come sottostringa:

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

Se alla fine del criterio è stato usato solo un % carattere, verranno restituiti solo elementi con una descrizione che ha iniziato con fruit:

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

Analogamente, il carattere jolly all'inizio del criterio indica che si vuole trovare una corrispondenza con i valori con il valore specificato come prefisso:

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

La NOT parola chiave inverte il risultato della valutazione dell'espressione LIKE della parola chiave. In questo esempio vengono restituiti tutti gli elementi che non corrispondono all'espressione LIKE .

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

È possibile cercare modelli che includono uno o più caratteri jolly usando la ESCAPE clausola . Ad esempio, se si desidera cercare descrizioni contenenti la stringa 20%, non si vuole interpretare come % carattere jolly. In questo esempio viene interpretato come carattere di escape in modo da poter eseguire l'escape ^ di un'istanza specifica di %.

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

È possibile racchiudere i caratteri jolly tra parentesi quadre per considerarli come caratteri letterali. Quando si racchiude un carattere jolly tra parentesi, si rimuovono tutti gli attributi speciali. Questa tabella include esempi di caratteri letterali.

Valore analizzato
LIKE "20-30[%]" 20-30%
LIKE "[_]n" _n
LIKE "[ [ ]" [
LIKE "]" ]

IN

Usare la IN parola chiave per verificare se un valore specificato corrisponde a qualsiasi valore in un elenco. Ad esempio, la query seguente restituisce tutti gli elementi in cui la categoria corrisponde ad almeno uno dei valori di un elenco.

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

Suggerimento

Se si include la chiave di partizione nel filtro IN, la query filtra automaticamente solo le partizioni pertinenti.

TOP

La TOP parola chiave restituisce il primo N numero di risultati della query in un ordine non definito. Come procedura consigliata, usare TOP con la ORDER BY clausola per limitare i risultati al primo N numero di valori ordinati. La combinazione di queste due clausole è l'unico modo per indicare in modo prevedibile quali righe TOP influiscono.

È possibile usare TOP con un valore costante, come nell'esempio seguente o con un valore di variabile usando query con parametri.

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