StructuredQuery

Una consulta de Firestore.

Las etapas de consulta se ejecutan en el siguiente orden: 1. de 2. donde 3. selecciona 4. orderBy + startAt + endAt 5. desplazamiento 6. límite

Representación 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)
  }
}
Campos
select

object (Projection)

Subconjunto opcional de los campos que se mostrarán.

Esto actúa como un elemento DocumentMask sobre los documentos que se muestran en una consulta. Si no se establece, se supone que el llamador quiere que se muestren todos los campos.

from[]

object (CollectionSelector)

Las colecciones a consultar.

where

object (Filter)

El filtro que se aplicará.

orderBy[]

object (Order)

El orden que se aplica a los resultados de la consulta.

Firestore permite que los emisores proporcionen un orden completo, uno parcial o ninguno. En todos los casos, Firestore garantiza un orden estable con las siguientes reglas:

  • El orderBy es obligatorio para hacer referencia a todos los campos usados con un filtro de desigualdad.
  • Todos los campos que deben estar en orderBy, pero aún no están presentes, se agregan en orden lexicográfico del nombre del campo.
  • Si no se especifica un pedido en __name__, se agrega de forma predeterminada.

Los campos se agregan con la misma dirección de orden que el último orden especificado o con "ASCENDING" si no se especificó ningún orden. Por ejemplo:

  • ORDER BY a se convierte en ORDER BY a ASC, __name__ ASC.
  • ORDER BY a DESC se convierte en ORDER BY a DESC, __name__ DESC.
  • WHERE a > 1 se convierte en WHERE a > 1 ORDER BY a ASC, __name__ ASC.
  • WHERE __name__ > ... AND a > 1 se convierte en WHERE __name__ > ... AND a > 1 ORDER BY a ASC, __name__ ASC.
startAt

object (Cursor)

Es un posible prefijo de una posición en el conjunto de resultados en el que puede comenzar la consulta.

El orden del conjunto de resultados se basa en la cláusula ORDER BY de la consulta original.

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

Los resultados de esta consulta se ordenan por (b ASC, __name__ ASC).

Los cursores pueden hacer referencia al orden completo o a un prefijo de la ubicación, aunque no pueden hacer referencia a más campos de los que se encuentran en el ORDER BY proporcionado.

Siguiendo con el ejemplo anterior, adjuntar los siguientes cursores de inicio tendrá un impacto diferente:

  • START BEFORE (2, /k/123): Inicia la consulta justo antes de a = 1 AND b > 2 AND __name__ > /k/123.
  • START AFTER (10): Inicia la consulta inmediatamente después de a = 1 AND b > 10.

A diferencia de OFFSET, que requiere escanear los primeros N resultados para omitirse, un cursor de inicio permite que la consulta comience en una posición lógica. No es necesario que esta posición coincida con un resultado real; se desplazará hacia delante desde esta posición para encontrar el siguiente documento.

Requisitos:

  • La cantidad de valores no puede ser mayor que la cantidad de campos especificados en la cláusula ORDER BY.
endAt

object (Cursor)

Es un posible prefijo de una posición en el conjunto de resultados en el que finaliza la consulta.

Es similar a START_AT, pero este controla la posición de finalización en lugar de la posición inicial.

Requisitos:

  • La cantidad de valores no puede ser mayor que la cantidad de campos especificados en la cláusula ORDER BY.
offset

integer

La cantidad de documentos que se deben omitir antes de mostrar el primer resultado.

Esto se aplica después de las restricciones especificadas por las cláusulas WHERE, START AT y END AT, pero antes de la cláusula LIMIT.

Requisitos:

  • Si se especifica, el valor debe ser mayor o igual que cero.
limit

integer

La cantidad máxima de resultados que se mostrarán.

Se aplica después de todas las demás restricciones.

Requisitos:

  • Si se especifica, el valor debe ser mayor o igual que cero.
findNearest

object (FindNearest)

Opcional. Una posible búsqueda de vecinos más cercanos.

Se aplica después de todos los demás filtros y orden.

Encuentra las incorporaciones vectoriales más cercanas al vector de consulta determinado.

Proyección

La proyección de los campos del documento que se mostrarán.

Representación JSON
{
  "fields": [
    {
      object (FieldReference)
    }
  ]
}
Campos
fields[]

object (FieldReference)

Los campos que se deben mostrar.

Si está vacío, se muestran todos los campos. Para que solo se muestre el nombre del documento, usa ['__name__'].

CollectionSelector

Una selección de una colección, como messages as m1.

Representación JSON
{
  "collectionId": string,
  "allDescendants": boolean
}
Campos
collectionId

string

El ID de la colección. Cuando se establece, selecciona solo colecciones con este ID.

allDescendants

boolean

Cuando es falso, solo selecciona colecciones que son elementos secundarios inmediatos del parent especificado en el RunQueryRequest contenedor. Cuando es verdadero, selecciona todas las colecciones subordinadas.

Filtro

Un filtro

Representación 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.
}
Campos
Campo de unión filter_type. El tipo de filtro. Las direcciones (filter_type) solo pueden ser una de las siguientes opciones:
compositeFilter

object (CompositeFilter)

Un filtro compuesto.

fieldFilter

object (FieldFilter)

Un filtro en el campo de un documento.

unaryFilter

object (UnaryFilter)

Un filtro que toma exactamente un argumento.

CompositeFilter

Es un filtro que combina varios filtros más con el operador determinado.

Representación JSON
{
  "op": enum (Operator),
  "filters": [
    {
      object (Filter)
    }
  ]
}
Campos
op

enum (Operator)

Operador para combinar varios filtros.

filters[]

object (Filter)

Es la lista de filtros que se combinarán.

Requisitos:

  • Hay al menos un filtro presente.

Operador

Un operador de filtro compuesto.

Enumeradores
OPERATOR_UNSPECIFIED No se especifica. No se debe usar este valor.
AND Los documentos deben cumplir con todos los filtros combinados.
OR Los documentos deben cumplir con al menos uno de los filtros combinados.

FieldFilter

Un filtro en un campo específico.

Representación JSON
{
  "field": {
    object (FieldReference)
  },
  "op": enum (Operator),
  "value": {
    object (Value)
  }
}
Campos
field

object (FieldReference)

El campo que se usará para filtrar.

op

enum (Operator)

Operador que se usará para filtrar.

value

object (Value)

Valor con el que se realizará la comparación.

Operador

Un operador de filtro de campo.

Enumeradores
OPERATOR_UNSPECIFIED No se especifica. No se debe usar este valor.
LESS_THAN

El field especificado es menor que el value especificado.

Requisitos:

  • Ese field está primero en orderBy.
LESS_THAN_OR_EQUAL

El field especificado es menor o igual que el value especificado.

Requisitos:

  • Ese field está primero en orderBy.
GREATER_THAN

El field especificado es mayor que el value especificado.

Requisitos:

  • Ese field está primero en orderBy.
GREATER_THAN_OR_EQUAL

El field especificado es mayor o igual que el value especificado.

Requisitos:

  • Ese field está primero en orderBy.
EQUAL El field especificado es igual al value especificado.
NOT_EQUAL

El field especificado no es igual al value especificado.

Requisitos:

  • No hay otros NOT_EQUAL, NOT_IN, IS_NOT_NULL o IS_NOT_NAN.
  • Ese field está primero en orderBy.
ARRAY_CONTAINS La field proporcionada es un array que contiene la value especificada.
IN

El field dado es igual a, al menos, un valor del array dado.

Requisitos:

  • Ese value es un ArrayValue no vacío, sujeto a límites de disyunción.
  • No hay filtros NOT_IN en la misma consulta.
ARRAY_CONTAINS_ANY

El field dado es un array que contiene cualquiera de los valores del array dado.

Requisitos:

  • Ese value es un ArrayValue no vacío, sujeto a límites de disyunción.
  • No hay otros filtros ARRAY_CONTAINS_ANY dentro de la misma disyunción.
  • No hay filtros NOT_IN en la misma consulta.
NOT_IN

El valor de field no está en el array dado.

Requisitos:

  • Ese value es un ArrayValue no vacío con un máximo de 10 valores.
  • No hay otros OR, IN, ARRAY_CONTAINS_ANY, NOT_IN, NOT_EQUAL, IS_NOT_NULL o IS_NOT_NAN.
  • Ese field está primero en orderBy.

UnaryFilter

Un filtro con un solo operando.

Representación 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.
}
Campos
op

enum (Operator)

El operador unario que se aplicará.

Campo de unión operand_type. El argumento del filtro. Las direcciones (operand_type) solo pueden ser una de las siguientes opciones:
field

object (FieldReference)

Campo en el que se aplica el operador.

Operador

Un operador unario.

Enumeradores
OPERATOR_UNSPECIFIED No se especifica. No se debe usar este valor.
IS_NAN El field especificado es igual a NaN.
IS_NULL El field especificado es igual a NULL.
IS_NOT_NAN

El field especificado no es igual a NaN.

Requisitos:

  • No hay otros NOT_EQUAL, NOT_IN, IS_NOT_NULL o IS_NOT_NAN.
  • Ese field está primero en orderBy.
IS_NOT_NULL

El field especificado no es igual a NULL.

Requisitos:

  • Un solo NOT_EQUAL, NOT_IN, IS_NOT_NULL o IS_NOT_NAN.
  • Ese field está primero en orderBy.

Pedidos

Un pedido en un campo.

Representación JSON
{
  "field": {
    object (FieldReference)
  },
  "direction": enum (Direction)
}
Campos
field

object (FieldReference)

El campo que se usará para ordenar.

direction

enum (Direction)

La dirección en la que se debe ordenar. La configuración predeterminada es ASCENDING.

Dirección

Una dirección de ordenamiento.

Enumeradores
DIRECTION_UNSPECIFIED No se especifica.
ASCENDING Ascendente.
DESCENDING Descendente.

FindNearest

Configuración de búsqueda de vecinos más cercanos.

Representación JSON
{
  "vectorField": {
    object (FieldReference)
  },
  "queryVector": {
    object (Value)
  },
  "distanceMeasure": enum (DistanceMeasure),
  "limit": integer
}
Campos
vectorField

object (FieldReference)

Obligatorio. Es un campo de vector indexado para realizar búsquedas. Solo se pueden mostrar documentos que contienen vectores cuya dimensionalidad coincide con queryVector.

queryVector

object (Value)

Obligatorio. El vector de consulta que se busca. Debe ser un vector de no más de 2,048 dimensiones.

distanceMeasure

enum (DistanceMeasure)

Obligatorio. La medida de distancia que se usará, obligatoria.

limit

integer

Obligatorio. La cantidad de vecinos más cercanos que se mostrarán. Debe ser un número entero positivo no más de 1,000.

DistanceMeasure

Es la medida de distancia que se usará al comparar vectores.

Enumeradores
DISTANCE_MEASURE_UNSPECIFIED No se debe establecer.
EUCLIDEAN Mide la distancia de EUCLIDEAN entre los vectores. Consulta Euclidea para obtener más información
COSINE Compara vectores según el ángulo entre ellos, lo que te permite medir la similitud que no se basa en la magnitud de los vectores. Recomendamos utilizar DOT_PRODUCT con vectores de unidad normalizados en lugar de la distancia COSINE, que es matemáticamente equivalente con un mejor rendimiento. Consulta Similitud coseno para obtener más información.
DOT_PRODUCT Similar al coseno, pero se ve afectado por la magnitud de los vectores. Consulta Dot Product para obtener más información.