Class: Google::Cloud::Firestore::Query
- Inherits:
-
Object
- Object
- Google::Cloud::Firestore::Query
- Defined in:
- lib/google/cloud/firestore/query.rb
Overview
Query
Represents a query to the Firestore API.
Instances of this class are immutable. All methods that refine the query return new instances.
Direct Known Subclasses
Instance Method Summary collapse
-
#end_at(*values) ⇒ Query
Ends query results at a set of field values.
-
#end_before(*values) ⇒ Query
Ends query results before a set of field values.
-
#get {|documents| ... } ⇒ Enumerator<DocumentSnapshot>
(also: #run)
Retrieves document snapshots for the query.
-
#limit(num) ⇒ Query
Limits a query to return a fixed number of results.
-
#offset(num) ⇒ Query
Skips to an offset in a query.
-
#order(field, direction = :asc) ⇒ Query
(also: #order_by)
Specifies an "order by" clause on a field.
-
#select(*fields) ⇒ Query
Restricts documents matching the query to return only data for the provided fields.
-
#start_after(*values) ⇒ Query
Starts query results after a set of field values.
-
#start_at(*values) ⇒ Query
Starts query results at a set of field values.
-
#where(field, operator, value) ⇒ Query
Filters the query on a field.
Instance Method Details
#end_at(*values) ⇒ Query
Ends query results at a set of field values. The result set will
include the document specified by values
.
If the current query already has specified end_before
or
end_at
, this will overwrite it.
The values provided here are for the field paths provides to order
.
Values provided to end_at
without an associated field path provided
to order
will result in an error.
517 518 519 520 521 522 523 524 525 526 527 |
# File 'lib/google/cloud/firestore/query.rb', line 517 def end_at *values new_query = @query.dup new_query ||= StructuredQuery.new values = values.flatten.map { |value| Convert.raw_to_value value } new_query.end_at = Google::Firestore::V1beta1::Cursor.new( values: values, before: false ) Query.start new_query, parent_path, client end |
#end_before(*values) ⇒ Query
Ends query results before a set of field values. The result set will
not include the document specified by values
.
If the current query already has specified end_before
or
end_at
, this will overwrite it.
The values provided here are for the field paths provides to order
.
Values provided to end_before
without an associated field path
provided to order
will result in an error.
474 475 476 477 478 479 480 481 482 483 484 |
# File 'lib/google/cloud/firestore/query.rb', line 474 def end_before *values new_query = @query.dup new_query ||= StructuredQuery.new values = values.flatten.map { |value| Convert.raw_to_value value } new_query.end_at = Google::Firestore::V1beta1::Cursor.new( values: values, before: true ) Query.start new_query, parent_path, client end |
#get {|documents| ... } ⇒ Enumerator<DocumentSnapshot> Also known as: run
Retrieves document snapshots for the query.
552 553 554 555 556 557 558 559 560 561 562 |
# File 'lib/google/cloud/firestore/query.rb', line 552 def get ensure_service! return enum_for(:run) unless block_given? results = service.run_query parent_path, @query results.each do |result| next if result.document.nil? yield DocumentSnapshot.from_query_result(result, client) end end |
#limit(num) ⇒ Query
Limits a query to return a fixed number of results. If the current query already has a limit set, this will overwrite it.
348 349 350 351 352 353 354 355 |
# File 'lib/google/cloud/firestore/query.rb', line 348 def limit num new_query = @query.dup new_query ||= StructuredQuery.new new_query.limit = Google::Protobuf::Int32Value.new(value: num) Query.start new_query, parent_path, client end |
#offset(num) ⇒ Query
Skips to an offset in a query. If the current query already has specified an offset, this will overwrite it.
316 317 318 319 320 321 322 323 |
# File 'lib/google/cloud/firestore/query.rb', line 316 def offset num new_query = @query.dup new_query ||= StructuredQuery.new new_query.offset = num Query.start new_query, parent_path, client end |
#order(field, direction = :asc) ⇒ Query Also known as: order_by
Specifies an "order by" clause on a field.
276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 |
# File 'lib/google/cloud/firestore/query.rb', line 276 def order field, direction = :asc new_query = @query.dup new_query ||= StructuredQuery.new field = FieldPath.parse field unless field.is_a? FieldPath new_query.order_by << StructuredQuery::Order.new( field: StructuredQuery::FieldReference.new( field_path: field.formatted_string ), direction: order_direction(direction) ) Query.start new_query, parent_path, client end |
#select(*fields) ⇒ Query
Restricts documents matching the query to return only data for the provided fields.
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/google/cloud/firestore/query.rb', line 87 def select *fields new_query = @query.dup new_query ||= StructuredQuery.new field_refs = fields.flatten.compact.map do |field| field = FieldPath.parse field unless field.is_a? FieldPath StructuredQuery::FieldReference.new \ field_path: field.formatted_string end new_query.select ||= StructuredQuery::Projection.new field_refs.each do |field_ref| new_query.select.fields << field_ref end Query.start new_query, parent_path, client end |
#start_after(*values) ⇒ Query
Starts query results after a set of field values. The result set will
not include the document specified by values
.
If the current query already has specified start_at
or
start_after
, this will overwrite it.
The values provided here are for the field paths provides to order
.
Values provided to start_after
without an associated field path
provided to order
will result in an error.
431 432 433 434 435 436 437 438 439 440 441 |
# File 'lib/google/cloud/firestore/query.rb', line 431 def start_after *values new_query = @query.dup new_query ||= StructuredQuery.new values = values.flatten.map { |value| Convert.raw_to_value value } new_query.start_at = Google::Firestore::V1beta1::Cursor.new( values: values, before: false ) Query.start new_query, parent_path, client end |
#start_at(*values) ⇒ Query
Starts query results at a set of field values. The result set will
include the document specified by values
.
If the current query already has specified start_at
or
start_after
, this will overwrite it.
The values provided here are for the field paths provides to order
.
Values provided to start_at
without an associated field path
provided to order
will result in an error.
388 389 390 391 392 393 394 395 396 397 398 |
# File 'lib/google/cloud/firestore/query.rb', line 388 def start_at *values new_query = @query.dup new_query ||= StructuredQuery.new values = values.flatten.map { |value| Convert.raw_to_value value } new_query.start_at = Google::Firestore::V1beta1::Cursor.new( values: values, before: true ) Query.start new_query, parent_path, client end |
#where(field, operator, value) ⇒ Query
Filters the query on a field.
215 216 217 218 219 220 221 222 223 224 225 226 |
# File 'lib/google/cloud/firestore/query.rb', line 215 def where field, operator, value new_query = @query.dup new_query ||= StructuredQuery.new field = FieldPath.parse field unless field.is_a? FieldPath new_query.where ||= default_filter new_query.where.composite_filter.filters << \ filter(field.formatted_string, operator, value) Query.start new_query, parent_path, client end |