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<DocumentReference>
(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.
510 511 512 513 514 515 516 517 518 519 |
# File 'lib/google/cloud/firestore/query.rb', line 510 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.
469 470 471 472 473 474 475 476 477 478 |
# File 'lib/google/cloud/firestore/query.rb', line 469 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<DocumentReference> Also known as: run
Retrieves document snapshots for the query.
544 545 546 547 548 549 550 551 552 553 554 |
# File 'lib/google/cloud/firestore/query.rb', line 544 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, self) 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.
347 348 349 350 351 352 353 354 |
# File 'lib/google/cloud/firestore/query.rb', line 347 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.
315 316 317 318 319 320 321 322 |
# File 'lib/google/cloud/firestore/query.rb', line 315 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 |
# 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.
428 429 430 431 432 433 434 435 436 437 |
# File 'lib/google/cloud/firestore/query.rb', line 428 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.
386 387 388 389 390 391 392 393 394 395 |
# File 'lib/google/cloud/firestore/query.rb', line 386 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 |