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下降。