StructuredQuery

Firestore 查询。

JSON 表示
{
  "select": {
    object (Projection)
  },
  "from": [
    {
      object (CollectionSelector)
    }
  ],
  "where": {
    object (Filter)
  },
  "orderBy": [
    {
      object (Order)
    }
  ],
  "startAt": {
    object (Cursor)
  },
  "endAt": {
    object (Cursor)
  },
  "offset": integer,
  "limit": integer
}
领域
select

object ( Projection )

要返回的字段的可选子集。

这充当查询返回的文档的DocumentMask 。如果未设置,则假定调用者希望返回所有字段。

from[]

object ( CollectionSelector )

要查询的集合。

where

object ( Filter )

要应用的过滤器。

orderBy[]

object ( Order )

应用于查询结果的顺序。

Firestore 允许调用者提供完整排序、部分排序或根本不排序。在所有情况下,Firestore 通过以下规则保证稳定的排序:

  • orderBy需要引用与不等式过滤器一起使用的所有字段。
  • 所有需要在orderBy中但尚不存在的字段都将按字段名称的字典顺序附加。
  • 如果未指定__name__上的顺序,则默认情况下会附加该顺序。

字段附加的排序方向与最后指定的顺序相同,如果未指定顺序,则附加“升序”。例如:

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

object ( Cursor )

结果集中开始查询的位置的潜在前缀。

结果集的排序基于原始查询的ORDER BY子句。

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

此查询的结果按(b ASC, __name__ ASC)排序。

游标可以引用完整的排序或位置的前缀,但它不能引用比提供的ORDER BY中的字段更多的字段。

继续上面的示例,附加以下启动光标将产生不同的影响:

  • START BEFORE (2, /k/123) :在a = 1 AND b > 2 AND __name__ > /k/123之前开始查询。
  • START AFTER (10) :在a = 1 AND b > 10之后立即开始查询。

与需要扫描前 N 个结果以跳过的OFFSET不同,起始游标允许查询从逻辑位置开始。该位置不需要与实际结果匹配,它将从此位置向前扫描以查找下一个文档。

要求:

  • 值的数量不能大于ORDER BY子句中指定的字段数。
endAt

object ( Cursor )

结果集中结束查询的位置的潜在前缀。

这与START_AT类似,但它控制结束位置而不是开始位置。

要求:

  • 值的数量不能大于ORDER BY子句中指定的字段数。
offset

integer

返回第一个结果之前要跳过的文档数。

这适用于WHERESTART ATEND AT指定的约束之后但LIMIT子句之前。

要求:

  • 如果指定,该值必须大于或等于零。
limit

integer

要返回的最大结果数。

在所有其他约束之后适用。

要求:

  • 如果指定,该值必须大于或等于零。

投影

要返回的文档字段的投影。

JSON 表示
{
  "fields": [
    {
      object (FieldReference)
    }
  ]
}
领域
fields[]

object ( FieldReference )

要返回的字段。

如果为空,则返回所有字段。要仅返回文档的名称,请使用['__name__']

集合选择器

集合的选择,例如messages as m1

JSON 表示
{
  "collectionId": string,
  "allDescendants": boolean
}
领域
collectionId

string

集合 ID。设置后,仅选择具有此 ID 的集合。

allDescendants

boolean

如果为 false,则仅选择作为包含的RunQueryRequest中指定的parent的直接子级的集合。如果为 true,则选择所有后代集合。

筛选

一个过滤器。

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.
}
领域
联合字段filter_type 。过滤器的类型。 filter_type只能是以下之一:
compositeFilter

object ( CompositeFilter )

复合过滤器。

fieldFilter

object ( FieldFilter )

文档字段上的过滤器。

unaryFilter

object ( UnaryFilter )

一种只接受一个参数的过滤器。

复合过滤器

使用给定运算符合并多个其他过滤器的过滤器。

JSON 表示
{
  "op": enum (Operator),
  "filters": [
    {
      object (Filter)
    }
  ]
}
领域
op

enum ( Operator )

用于组合多个过滤器的运算符。

filters[]

object ( Filter )

要组合的过滤器列表。

要求:

  • 存在至少一个过滤器。

操作员

复合过滤器运算符。

枚举
OPERATOR_UNSPECIFIED未指定。不得使用该值。
AND需要文档来满足所有组合过滤器。
OR文档需要满足至少一个组合过滤器。

字段过滤器

针对特定字段的过滤器。

JSON 表示
{
  "field": {
    object (FieldReference)
  },
  "op": enum (Operator),
  "value": {
    object (Value)
  }
}
领域
field

object ( FieldReference )

要过滤的字段。

op

enum ( Operator )

要过滤的运算符。

value

object ( Value )

要比较的值。

操作员

字段过滤器运算符。

枚举
OPERATOR_UNSPECIFIED未指定。不得使用该值。
LESS_THAN

给定field小于给定value

要求:

  • fieldorderBy中排在第一位。
LESS_THAN_OR_EQUAL

给定field小于或等于给定value

要求:

  • fieldorderBy中排在第一位。
GREATER_THAN

给定field大于给定value

要求:

  • fieldorderBy中排在第一位。
GREATER_THAN_OR_EQUAL

给定field大于或等于给定value

要求:

  • fieldorderBy中排在第一位。
EQUAL给定field等于给定value
NOT_EQUAL

给定field不等于给定value

要求:

  • 没有其他NOT_EQUALNOT_INIS_NOT_NULLIS_NOT_NAN
  • fieldorderBy中排在第一位。
ARRAY_CONTAINS给定field是包含给定value的数组。
IN

给定field至少等于给定数组中的一个值。

要求:

  • value是一个非空ArrayValue ,受析取限制。
  • 同一查询中没有NOT_IN过滤器。
ARRAY_CONTAINS_ANY

给定field是一个数组,其中包含给定数组中的任何值。

要求:

  • value是一个非空ArrayValue ,受析取限制。
  • 同一析取内没有其他ARRAY_CONTAINS_ANY过滤器。
  • 同一查询中没有NOT_IN过滤器。
NOT_IN

field的值不在给定数组中。

要求:

  • value是一个非空ArrayValue ,最多包含 10 个值。
  • 没有其他ORINARRAY_CONTAINS_ANYNOT_INNOT_EQUALIS_NOT_NULLIS_NOT_NAN
  • fieldorderBy中排在第一位。

一元过滤器

具有单个操作数的过滤器。

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.
}
领域
op

enum ( Operator )

要应用的一元运算符。

联合字段operand_type 。过滤器的参数。 operand_type只能是以下之一:
field

object ( FieldReference )

要应用运算符的字段。

操作员

一元运算符。

枚举
OPERATOR_UNSPECIFIED未指定。不得使用该值。
IS_NAN给定field等于NaN
IS_NULL给定field等于NULL
IS_NOT_NAN

给定field不等于NaN

要求:

  • 没有其他NOT_EQUALNOT_INIS_NOT_NULLIS_NOT_NAN
  • fieldorderBy中排在第一位。
IS_NOT_NULL

给定field不等于NULL

要求:

  • 单个NOT_EQUALNOT_INIS_NOT_NULLIS_NOT_NAN
  • fieldorderBy中排在第一位。

命令

田野上的命令。

JSON 表示
{
  "field": {
    object (FieldReference)
  },
  "direction": enum (Direction)
}
领域
field

object ( FieldReference )

排序依据的字段。

direction

enum ( Direction )

排序的方向。默认为ASCENDING

方向

一个排序方向。

枚举
DIRECTION_UNSPECIFIED未指定。
ASCENDING上升。
DESCENDING下降。