class Mongo::Protocol::Query
MongoDB Wire protocol Query message.
This is a client request message that is sent to the server in order to retrieve documents matching provided query.
Users may also provide additional options such as a projection, to select a subset of the fields, a number to skip or a limit on the number of returned documents.
There are a variety of flags that can be used to adjust cursor parameters or the desired consistancy and integrity the results.
@api semipublic
Constants
- FLAGS
Available flags for a Query message.
Attributes
Public Class Methods
Creates a new Query message
@example Find all users named Tyler.
Query.new('xgen', 'users', {:name => 'Tyler'})
@example Find all users named Tyler skipping 5 and returning 10.
Query.new('xgen', 'users', {:name => 'Tyler'}, :skip => 5, :limit => 10)
@example Find all users with slave ok bit set
Query.new('xgen', 'users', {:name => 'Tyler'}, :flags => [:slave_ok])
@example Find all user ids.
Query.new('xgen', 'users', {}, :fields => {:id => 1})
@param database [String, Symbol] The database to query. @param collection [String, Symbol] The collection to query. @param selector [Hash] The query selector. @param options [Hash] The additional query options.
@option options :project [Hash] The projection. @option options :skip [Integer] The number of documents to skip. @option options :limit [Integer] The number of documents to return. @option options :flags [Array] The flags for the query message.
Supported flags: +:tailable_cursor+, +:slave_ok+, +:oplog_replay+, +:no_cursor_timeout+, +:await_data+, +:exhaust+, +:partial+
# File lib/mongo/protocol/query.rb, line 60 def initialize(database, collection, selector, options = {}) @database = database @namespace = "#{database}.#{collection}" @selector = selector @options = options @project = options[:project] @limit = determine_limit @skip = options[:skip] || 0 @flags = options[:flags] || [] @upconverter = Upconverter.new(collection, selector, options, flags) end
Public Instance Methods
Return the event payload for monitoring.
@example Return the event payload.
message.payload
@return [ Hash ] The event payload.
@since 2.1.0
# File lib/mongo/protocol/query.rb, line 80 def payload { command_name: upconverter.command_name, database_name: @database, command: upconverter.command, request_id: request_id } end
Query messages require replies from the database.
@example Does the message require a reply?
message.replyable?
@return [ true ] Always true for queries.
@since 2.0.0
# File lib/mongo/protocol/query.rb, line 97 def replyable? true end
Private Instance Methods
# File lib/mongo/protocol/query.rb, line 111 def determine_limit [ @options[:limit] || @options[:batch_size], @options[:batch_size] || @options[:limit] ].min || 0 end
The operation code required to specify a Query message. @return [Fixnum] the operation code.
# File lib/mongo/protocol/query.rb, line 107 def op_code 2004 end