Class: Mongo::Protocol::Query
- Includes:
- Monitoring::Event::Secure
- Defined in:
- lib/mongo/protocol/query.rb
Overview
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 consistency and integrity the results.
Defined Under Namespace
Classes: Upconverter
Constant Summary
Constants included from Monitoring::Event::Secure
Monitoring::Event::Secure::REDACTED_COMMANDS
Constants inherited from Message
Message::BATCH_SIZE, Message::COLLECTION, Message::LIMIT, Message::MAX_MESSAGE_SIZE, Message::ORDERED, Message::Q
Instance Attribute Summary
Attributes inherited from Message
Instance Method Summary collapse
-
#initialize(database, collection, selector, options = {}) ⇒ Query
constructor
Creates a new Query message.
-
#maybe_compress(compressor, zlib_compression_level = nil) ⇒ Message
private
Compress the message, if the command being sent permits compression.
-
#payload ⇒ BSON::Document
Return the event payload for monitoring.
-
#replyable? ⇒ true
Query messages require replies from the database.
-
#serialize(buffer = BSON::ByteBuffer.new, max_bson_size = nil, bson_overhead = nil) ⇒ BSON::ByteBuffer
Serializes message into bytes that can be sent on the wire.
Methods included from Monitoring::Event::Secure
#compression_allowed?, #redacted, #sensitive?
Methods inherited from Message
#==, deserialize, #hash, #maybe_add_server_api, #maybe_decrypt, #maybe_encrypt, #maybe_inflate, #number_returned, #set_request_id
Methods included from Id
Constructor Details
#initialize(database, collection, selector, options = {}) ⇒ Query
Creates a new Query message
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/mongo/protocol/query.rb', line 64 def initialize(database, collection, selector, = {}) @database = database @namespace = "#{database}.#{collection}" if selector.nil? raise ArgumentError, 'Selector cannot be nil' end @selector = selector @options = @project = [:project] @limit = determine_limit @skip = [:skip] || 0 @flags = [:flags] || [] @upconverter = Upconverter.new( collection, BSON::Document.new(selector), BSON::Document.new(), flags, ) super end |
Instance Method Details
#maybe_compress(compressor, zlib_compression_level = nil) ⇒ Message
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Compress the message, if the command being sent permits compression. Otherwise returns self.
125 126 127 |
# File 'lib/mongo/protocol/query.rb', line 125 def maybe_compress(compressor, zlib_compression_level = nil) compress_if_possible(selector.keys.first, compressor, zlib_compression_level) end |
#payload ⇒ BSON::Document
Return the event payload for monitoring.
93 94 95 96 97 98 99 100 |
# File 'lib/mongo/protocol/query.rb', line 93 def payload BSON::Document.new( command_name: upconverter.command_name, database_name: @database, command: upconverter.command, request_id: request_id ) end |
#replyable? ⇒ true
Query messages require replies from the database.
110 111 112 |
# File 'lib/mongo/protocol/query.rb', line 110 def replyable? true end |
#serialize(buffer = BSON::ByteBuffer.new, max_bson_size = nil, bson_overhead = nil) ⇒ BSON::ByteBuffer
Serializes message into bytes that can be sent on the wire.
135 136 137 138 139 |
# File 'lib/mongo/protocol/query.rb', line 135 def serialize(buffer = BSON::ByteBuffer.new, max_bson_size = nil, bson_overhead = nil) validate_document_size!(max_bson_size) super end |