StructuredQuery

Una query Firestore.

Le fasi di query vengono eseguite nel seguente ordine: 1. da 2. dove 3. selezionare 4. orderBy + startAt + endAt 5. offset 6. limite

Rappresentazione JSON
{
  "select": {
    object (Projection)
  },
  "from": [
    {
      object (CollectionSelector)
    }
  ],
  "where": {
    object (Filter)
  },
  "orderBy": [
    {
      object (Order)
    }
  ],
  "startAt": {
    object (Cursor)
  },
  "endAt": {
    object (Cursor)
  },
  "offset": integer,
  "limit": integer,
  "findNearest": {
    object (FindNearest)
  }
}
Campi
select

object (Projection)

Sottoinsieme facoltativo dei campi da restituire.

Agisce come DocumentMask per i documenti restituiti da una query. Se non impostato, presuppone che il chiamante voglia restituire tutti i campi.

from[]

object (CollectionSelector)

Le raccolte su cui eseguire una query.

where

object (Filter)

Il filtro da applicare.

orderBy[]

object (Order)

L'ordine da applicare ai risultati della query.

Firestore consente ai chiamanti di fornire un ordinamento completo, parziale o nessun ordinamento. In tutti i casi, Firestore garantisce un ordinamento stabile tramite le seguenti regole:

  • orderBy è obbligatorio per fare riferimento a tutti i campi utilizzati con un filtro di disuguaglianza.
  • Tutti i campi che devono essere in orderBy, ma non sono già presenti, vengono aggiunti in ordine lessicografico del nome del campo.
  • Se un ordine su __name__ non è specificato, viene aggiunto per impostazione predefinita.

Ai campi viene aggiunta la stessa direzione di ordinamento dell'ultimo ordine specificato, oppure "ASCENDENTE" se non è stato specificato alcun ordine. Ad esempio:

  • ORDER BY a diventa ORDER BY a ASC, __name__ ASC
  • ORDER BY a DESC diventa ORDER BY a DESC, __name__ DESC
  • WHERE a > 1 diventa WHERE a > 1 ORDER BY a ASC, __name__ ASC
  • WHERE __name__ > ... AND a > 1 diventa WHERE __name__ > ... AND a > 1 ORDER BY a ASC, __name__ ASC
startAt

object (Cursor)

Un potenziale prefisso di una posizione nel set di risultati da cui iniziare la query.

L'ordine del set di risultati si basa sulla clausola ORDER BY della query originale.

SELECT * FROM k WHERE a = 1 AND b > 2 ORDER BY b ASC, __name__ ASC;

I risultati di questa query sono ordinati per (b ASC, __name__ ASC).

I cursori possono fare riferimento all'ordine completo o a un prefisso della posizione, anche se non possono fare riferimento a più campi rispetto a quelli dell'elemento ORDER BY fornito.

Proseguendo con l'esempio precedente, l'aggiunta dei seguenti cursori di avvio avrà un impatto diverso:

  • START BEFORE (2, /k/123): avvia la query subito prima di a = 1 AND b > 2 AND __name__ > /k/123.
  • START AFTER (10): avvia la query subito dopo a = 1 AND b > 10.

A differenza di OFFSET, che richiede la scansione dei primi N risultati per saltare, un cursore di avvio consente alla query di iniziare in una posizione logica. Questa posizione non è necessaria per corrispondere a un risultato effettivo, verrà eseguita la scansione in avanti da questa posizione per trovare il documento successivo.

Richiede:

  • Il numero di valori non può essere maggiore del numero di campi specificati nella clausola ORDER BY.
endAt

object (Cursor)

Un potenziale prefisso di una posizione nel set di risultati in cui terminare la query.

È simile a START_AT, ma controlla la posizione finale anziché la posizione iniziale.

Richiede:

  • Il numero di valori non può essere maggiore del numero di campi specificati nella clausola ORDER BY.
offset

integer

Il numero di documenti da saltare prima di restituire il primo risultato.

Questo si applica dopo i vincoli specificati da WHERE, START AT e END AT, ma prima della clausola LIMIT.

Richiede:

  • Il valore deve essere maggiore o uguale a zero, se specificato.
limit

integer

Il numero massimo di risultati da restituire.

Si applica dopo tutti gli altri vincoli.

Richiede:

  • Il valore deve essere maggiore o uguale a zero, se specificato.
findNearest

object (FindNearest)

Campo facoltativo. Una potenziale ricerca di vicini più vicini.

Si applica dopo tutti gli altri filtri e ordine.

Trova gli incorporamenti vettoriali più vicini al vettore di query specificato.

Projection

La proiezione dei campi del documento da restituire.

Rappresentazione JSON
{
  "fields": [
    {
      object (FieldReference)
    }
  ]
}
Campi
fields[]

object (FieldReference)

I campi da restituire.

Se è vuoto, vengono restituiti tutti i campi. Per restituire solo il nome del documento, utilizza ['__name__'].

CollectionSelector

Una selezione di una raccolta, ad esempio messages as m1.

Rappresentazione JSON
{
  "collectionId": string,
  "allDescendants": boolean
}
Campi
collectionId

string

L'ID raccolta. Se impostato, vengono selezionate solo le collezioni con questo ID.

allDescendants

boolean

Quando il valore è false, vengono selezionate solo le raccolte che sono elementi secondari immediati del valore di parent specificato nella sezione RunQueryRequest contenitore. Se il valore è true, vengono selezionate tutte le raccolte discendenti.

Filtro

Un filtro.

Rappresentazione JSON
{

  // Union field filter_type can be only one of the following:
  "compositeFilter": {
    object (CompositeFilter)
  },
  "fieldFilter": {
    object (FieldFilter)
  },
  "unaryFilter": {
    object (UnaryFilter)
  }
  // End of list of possible types for union field filter_type.
}
Campi
Campo di unione filter_type. Il tipo di filtro. filter_type può essere solo uno dei seguenti:
compositeFilter

object (CompositeFilter)

Un filtro composto.

fieldFilter

object (FieldFilter)

Un filtro su un campo documento.

unaryFilter

object (UnaryFilter)

Un filtro che accetta esattamente un argomento.

CompositeFilter

Un filtro che unisce più filtri utilizzando l'operatore specificato.

Rappresentazione JSON
{
  "op": enum (Operator),
  "filters": [
    {
      object (Filter)
    }
  ]
}
Campi
op

enum (Operator)

L'operatore per combinare più filtri.

filters[]

object (Filter)

L'elenco di filtri da combinare.

Richiede:

  • È presente almeno un filtro.

Operatore

Un operatore di filtro composto.

Enum
OPERATOR_UNSPECIFIED Non specificato. Questo valore non deve essere utilizzato.
AND I documenti devono soddisfare tutti i filtri combinati.
OR I documenti devono soddisfare almeno uno dei filtri combinati.

FieldFilter

Un filtro su un campo specifico.

Rappresentazione JSON
{
  "field": {
    object (FieldReference)
  },
  "op": enum (Operator),
  "value": {
    object (Value)
  }
}
Campi
field

object (FieldReference)

Il campo in base al quale applicare il filtro.

op

enum (Operator)

L'operatore in base al quale applicare il filtro.

value

object (Value)

Il valore con cui eseguire il confronto.

Operatore

Un operatore di filtro di campo.

Enum
OPERATOR_UNSPECIFIED Non specificato. Questo valore non deve essere utilizzato.
LESS_THAN

Il valore field specificato è inferiore al valore value specificato.

Richiede:

  • Quel field al primo posto nel mese di orderBy.
LESS_THAN_OR_EQUAL

Il valore field specificato è inferiore o uguale al valore value specificato.

Richiede:

  • Quel field al primo posto nel mese di orderBy.
GREATER_THAN

Il valore field specificato è maggiore del valore value specificato.

Richiede:

  • Quel field al primo posto nel mese di orderBy.
GREATER_THAN_OR_EQUAL

Il valore field specificato è maggiore o uguale al valore value specificato.

Richiede:

  • Quel field al primo posto nel mese di orderBy.
EQUAL Il valore field specificato è uguale al valore value specificato.
NOT_EQUAL

Il valore field specificato non è uguale al valore value specificato.

Richiede:

  • Nessun altro elemento NOT_EQUAL, NOT_IN, IS_NOT_NULL o IS_NOT_NAN.
  • Quel field viene prima nel orderBy.
ARRAY_CONTAINS Il valore field specificato è un array che contiene il valore value specificato.
IN

Il valore field specificato è uguale ad almeno un valore nell'array specificato.

Richiede:

  • Questo value è un ArrayValue non vuoto, soggetto a limiti di disgiunzione.
  • Nessun filtro NOT_IN nella stessa query.
ARRAY_CONTAINS_ANY

Il valore field specificato è un array che contiene uno qualsiasi dei valori nell'array indicato.

Richiede:

  • Questo value è un ArrayValue non vuoto, soggetto a limiti di disgiunzione.
  • Nessun altro filtro ARRAY_CONTAINS_ANY all'interno della stessa disgiunzione.
  • Nessun filtro NOT_IN nella stessa query.
NOT_IN

Il valore di field non è nell'array specificato.

Richiede:

  • Questo value è un valore ArrayValue non vuoto con al massimo 10 valori.
  • Nessun altro elemento OR, IN, ARRAY_CONTAINS_ANY, NOT_IN, NOT_EQUAL, IS_NOT_NULL o IS_NOT_NAN.
  • Quel field viene prima nel orderBy.

UnaryFilter

Un filtro con un singolo operando.

Rappresentazione JSON
{
  "op": enum (Operator),

  // Union field operand_type can be only one of the following:
  "field": {
    object (FieldReference)
  }
  // End of list of possible types for union field operand_type.
}
Campi
op

enum (Operator)

L'operatore unario da applicare.

Campo di unione operand_type. L'argomento del filtro. operand_type può essere solo uno dei seguenti:
field

object (FieldReference)

Il campo a cui applicare l'operatore.

Operatore

Un operatore unario.

Enum
OPERATOR_UNSPECIFIED Non specificato. Questo valore non deve essere utilizzato.
IS_NAN Il valore field specificato è uguale a NaN.
IS_NULL Il valore field specificato è uguale a NULL.
IS_NOT_NAN

Il valore field specificato non è uguale a NaN.

Richiede:

  • Nessun altro elemento NOT_EQUAL, NOT_IN, IS_NOT_NULL o IS_NOT_NAN.
  • Quel field viene prima nel orderBy.
IS_NOT_NULL

Il valore field specificato non è uguale a NULL.

Richiede:

  • Un singolo elemento NOT_EQUAL, NOT_IN, IS_NOT_NULL o IS_NOT_NAN.
  • Quel field viene prima nel orderBy.

Ordine

Un ordine in un campo.

Rappresentazione JSON
{
  "field": {
    object (FieldReference)
  },
  "direction": enum (Direction)
}
Campi
field

object (FieldReference)

Il campo in base al quale ordinare.

direction

enum (Direction)

La direzione in base alla quale ordinare. Il valore predefinito è ASCENDING.

Direzione

Una direzione di ordinamento.

Enum
DIRECTION_UNSPECIFIED Non specificato.
ASCENDING Crescente.
DESCENDING Decrescente.

FindNearest

Configurazione di ricerca dei vicini più vicini.

Rappresentazione JSON
{
  "vectorField": {
    object (FieldReference)
  },
  "queryVector": {
    object (Value)
  },
  "distanceMeasure": enum (DistanceMeasure),
  "limit": integer
}
Campi
vectorField

object (FieldReference)

obbligatorio. Un campo del vettore indicizzato in cui eseguire la ricerca. È possibile restituire solo i documenti che contengono vettori la cui dimensionalità corrisponde a queryVector.

queryVector

object (Value)

obbligatorio. Il vettore di query su cui stiamo effettuando la ricerca. Deve essere un vettore di massimo 2048 dimensioni.

distanceMeasure

enum (DistanceMeasure)

obbligatorio. La misurazione della distanza da utilizzare, obbligatoria.

limit

integer

obbligatorio. Il numero di vicini più prossimi da restituire. Deve essere un numero intero positivo non superiore a 1000.

DistanceMeasure

La misurazione della distanza da utilizzare per il confronto dei vettori.

Enum
DISTANCE_MEASURE_UNSPECIFIED Non deve essere impostato.
EUCLIDEAN Misura la distanza EUCLIDEAN tra i vettori. Per scoprire di più, vedi la sezione euclidea
COSINE Confronta i vettori in base all'angolo tra loro, consentendoti di misurare la somiglianza non basata sulla grandezza dei vettori. Consigliamo di utilizzare DOT_PRODUCT con vettori normalizzati unitari anziché la distanza COSINE, che è matematicamente equivalente con prestazioni migliori. Per scoprire di più, consulta la sezione Cosine Similarity.
DOT_PRODUCT Simile al coseno, ma è influenzato dalla grandezza dei vettori. Per saperne di più, consulta la sezione Prodotto punto.