StructuredQuery

Una consulta de Firestore.

Las etapas de consulta se ejecutan en el siguiente orden: 1. desde 2. donde 3. seleccionar 4. orderBy + startAt + endAt 5. offset 6. limit

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 DocumentMask sobre los documentos que se muestran en una consulta. Cuando no se establece, supone que el llamador desea que se devuelvan todos los campos.

from[]

object (CollectionSelector)

Las colecciones que se consultarán.

where

object (Filter)

El filtro que se aplicará.

orderBy[]

object (Order)

El orden en que se aplicará a los resultados de la consulta.

Firestore permite que los llamadores proporcionen un orden completo o parcial, o bien no proporcionar ningún orden. En todos los casos, Firestore garantiza un orden estable mediante las siguientes reglas:

  • orderBy es obligatorio para hacer referencia a todos los campos que se usan con un filtro de desigualdad.
  • Todos los campos que deben estar en orderBy, pero que 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.

A los campos se les agrega la misma dirección de orden que la del último orden especificado, o “ASCENDING”. si no se especificó ningún orden. Por ejemplo:

  • ORDER BY a pasa a ser ORDER BY a ASC, __name__ ASC.
  • ORDER BY a DESC pasa a ser ORDER BY a DESC, __name__ DESC.
  • WHERE a > 1 pasa a ser WHERE a > 1 ORDER BY a ASC, __name__ ASC.
  • WHERE __name__ > ... AND a > 1 pasa a ser 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 para iniciar 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 están ordenados 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 que los del 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 justo después de a = 1 AND b > 10.

A diferencia de OFFSET, que requiere analizar los primeros N resultados para omitirlos, 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, sino que escaneará hacia adelante 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)

Un posible prefijo de una posición en el conjunto de resultados para finalizar la consulta.

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

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 WHERE, START AT y END AT, pero antes de la cláusula LIMIT.

Requisitos:

  • El valor debe ser mayor o igual que cero si se especifica.
limit

integer

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

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

Requisitos:

  • El valor debe ser mayor o igual que cero si se especifica.
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 dado.

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 mostrarán.

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

Selector de colección

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

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

string

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

allDescendants

boolean

Cuando es falso, solo selecciona colecciones que sean elementos secundarios inmediatos del parent especificado en el RunQueryRequest que las contiene. 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. filter_type puede ser solo uno de los siguientes:
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 otros filtros usando 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.

Operador

Un operador de filtro compuesto.

Enums
OPERATOR_UNSPECIFIED Sin especificar. 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.

Filtro Campo

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 por el que se debe filtrar.

value

object (Value)

Valor con el que se va a comparar.

Operador

Un operador de filtro de campo.

Enums
OPERATOR_UNSPECIFIED Sin especificar. No se debe usar este valor.
LESS_THAN

El field especificado es menor que el value especificado.

Requisitos:

  • Esas field aparecen primero en orderBy.
LESS_THAN_OR_EQUAL

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

Requisitos:

  • Esas field aparecen primero en orderBy.
GREATER_THAN

El field especificado es mayor que el value especificado.

Requisitos:

  • Esas field aparecen primero en orderBy.
GREATER_THAN_OR_EQUAL

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

Requisitos:

  • Esas field aparecen primero en orderBy.
EQUAL El field especificado es igual al value especificado.
NOT_EQUAL

El field proporcionado no es igual al value especificado.

Requisitos:

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

El field proporcionado es igual a al menos un valor del array especificado.

Requisitos:

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

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

Requisitos:

  • Ese value es un ArrayValue no vacío, sujeto a los 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 se encuentra en el array proporcionado.

Requisitos:

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

Filtro unario

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 aplica.

Campo de unión operand_type. El argumento del filtro. operand_type puede ser solo uno de los siguientes:
field

object (FieldReference)

El campo al que se aplica el operador.

Operador

Un operador unario.

Enums
OPERATOR_UNSPECIFIED Sin especificar. No se debe usar este valor.
IS_NAN El field proporcionado es igual a NaN.
IS_NULL El field proporcionado es igual a NULL.
IS_NOT_NAN

El field especificado no es igual a NaN.

Requisitos:

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

El field especificado no es igual a NULL.

Requisitos:

  • Una sola NOT_EQUAL, NOT_IN, IS_NOT_NULL o IS_NOT_NAN.
  • Ese field está primero en orderBy.

Pedido

Un pedido en un campo.

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

object (FieldReference)

El campo según el cual se debe realizar el pedido.

direction

enum (Direction)

Indica las instrucciones para ordenar. La configuración predeterminada es ASCENDING.

Dirección

Una dirección de ordenamiento.

Enums
DIRECTION_UNSPECIFIED Sin especificar.
ASCENDING Ascendente.
DESCENDING Descendente.

Buscar más cercano

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 buscar. Solo se pueden mostrar los documentos que contienen vectores cuya dimensionalidad coincide con el queryVector.

queryVector

object (Value)

Obligatorio. El vector de consulta que estamos buscando. 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 de no más de 1,000.

Medición de distancia

La medida de distancia que se usará para comparar vectores.

Enums
DISTANCE_MEASURE_UNSPECIFIED No se debe establecer.
EUCLIDEAN Mide la distancia EUCLIDEAN entre los vectores. Consulta Euclidean para obtener más información
COSINE Compara vectores según el ángulo entre ellos, lo que te permite medir una similitud que no se basa en la magnitud de los vectores. Recomendamos usar DOT_PRODUCT con vectores normalizados por unidad en lugar de la distancia COSINE, que es matemáticamente equivalente con un mejor rendimiento. Consulta Similitud de 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.