Class StructuredQuery
A Firestore query. The query stages are executed in the following order: 1. from 2. where 3. select 4. order_by
- start_at + end_at 5. offset 6. limit 7. find_nearest
Implements
Inherited Members
Namespace: Google.Apis.Firestore.v1.Data
Assembly: Google.Apis.Firestore.v1.dll
Syntax
public class StructuredQuery : IDirectResponseSchema
Properties
ETag
The ETag of the item.
Declaration
public virtual string ETag { get; set; }
Property Value
| Type | Description |
|---|---|
| string |
EndAt
A potential prefix of a position in the result set to end the query at. This is similar to START_AT but
with it controlling the end position rather than the start position. Requires: * The number of values cannot
be greater than the number of fields specified in the ORDER BY clause.
Declaration
[JsonProperty("endAt")]
public virtual Cursor EndAt { get; set; }
Property Value
| Type | Description |
|---|---|
| Cursor |
FindNearest
Optional. A potential nearest neighbors search. Applies after all other filters and ordering. Finds the closest vector embeddings to the given query vector.
Declaration
[JsonProperty("findNearest")]
public virtual FindNearest FindNearest { get; set; }
Property Value
| Type | Description |
|---|---|
| FindNearest |
From
The collections to query.
Declaration
[JsonProperty("from")]
public virtual IList<CollectionSelector> From { get; set; }
Property Value
| Type | Description |
|---|---|
| IList<CollectionSelector> |
Limit
The maximum number of results to return. Applies after all other constraints. Requires: * The value must be greater than or equal to zero if specified.
Declaration
[JsonProperty("limit")]
public virtual int? Limit { get; set; }
Property Value
| Type | Description |
|---|---|
| int? |
Offset
The number of documents to skip before returning the first result. This applies after the constraints
specified by the WHERE, START AT, & END AT but before the LIMIT clause. Requires: * The
value must be greater than or equal to zero if specified.
Declaration
[JsonProperty("offset")]
public virtual int? Offset { get; set; }
Property Value
| Type | Description |
|---|---|
| int? |
OrderBy
The order to apply to the query results. Callers can provide a full ordering, a partial ordering, or no
ordering at all. While Firestore will always respect the provided order, the behavior for queries without a
full ordering is different per database edition: In Standard edition, Firestore guarantees a stable ordering
through the following rules: * The order_by is required to reference all fields used with an inequality
filter. * All fields that are required to be in the order_by but are not already present are appended in
lexicographical ordering of the field name. * If an order on __name__ is not specified, it is appended by
default. Fields are appended with the same sort direction as the last order specified, or 'ASCENDING' if no
order was specified. For example: * ORDER BY a becomes ORDER BY a ASC, __name__ ASC * ORDER BY a DESC
becomes ORDER BY a DESC, __name__ DESC * WHERE a > 1 becomes WHERE a > 1 ORDER BY a ASC, __name__ ASC * WHERE __name__ > ... AND a > 1 becomes WHERE __name__ > ... AND a > 1 ORDER BY a ASC, __name__ ASC In Enterprise edition, Firestore does not guarantee a stable
ordering. Instead it will pick the most efficient ordering based on the indexes available at the time of
query execution. This will result in a different ordering for queries that are otherwise identical. To
ensure a stable ordering, always include a unique field in the order_by clause, such as __name__.
Declaration
[JsonProperty("orderBy")]
public virtual IList<Order> OrderBy { get; set; }
Property Value
| Type | Description |
|---|---|
| IList<Order> |
Select
Optional sub-set of the fields to return. This acts as a DocumentMask over the documents returned from a query. When not set, assumes that the caller wants all fields returned.
Declaration
[JsonProperty("select")]
public virtual Projection Select { get; set; }
Property Value
| Type | Description |
|---|---|
| Projection |
StartAt
A potential prefix of a position in the result set to start the query at. The ordering of the result set is
based on the ORDER BY clause of the original query.
SELECT * FROM k WHERE a = 1 AND b > 2 ORDER
BY b ASC, __name__ ASC;
This query's results are ordered by (b ASC, __name__ ASC). Cursors can
reference either the full ordering or a prefix of the location, though it cannot reference more fields than
what are in the provided ORDER BY. Continuing off the example above, attaching the following start cursors
will have varying impact: - START BEFORE (2, /k/123): start the query right before a = 1 AND b > 2 AND __name__ > /k/123. - START AFTER (10): start the query right after a = 1 AND b > 10.
Unlike OFFSET which requires scanning over the first N results to skip, a start cursor allows the query to
begin at a logical position. This position is not required to match an actual result, it will scan forward
from this position to find the next document. Requires: * The number of values cannot be greater than the
number of fields specified in the ORDER BY clause.
Declaration
[JsonProperty("startAt")]
public virtual Cursor StartAt { get; set; }
Property Value
| Type | Description |
|---|---|
| Cursor |
Where
The filter to apply.
Declaration
[JsonProperty("where")]
public virtual Filter Where { get; set; }
Property Value
| Type | Description |
|---|---|
| Filter |