Class: Mongo::QueryMessage

Inherits:
Message
  • Object
show all
Defined in:
lib/mongo/message/query_message.rb

Constant Summary

Constants inherited from Message

Message::HEADER_SIZE

Instance Attribute Summary collapse

Attributes inherited from Message

#buf

Instance Method Summary collapse

Methods inherited from Message

#dump, #to_a, #update_message_length, #write_doc, #write_int, #write_long, #write_string

Constructor Details

#initialize(db_name, collection_name, query) ⇒ QueryMessage

Returns a new instance of QueryMessage.



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/mongo/message/query_message.rb', line 27

def initialize(db_name, collection_name, query)
  super(OP_QUERY)
  @query = query
  write_int(0)
  write_string("#{db_name}.#{collection_name}")
  write_int(query.number_to_skip)
  write_int(-query.number_to_return) # Negative means hard limit
  sel = query.selector
  if query.contains_special_fields
    sel = OrderedHash.new
    sel['query'] = query.selector
    if query.order_by && query.order_by.length > 0
      sel['orderby'] = case query.order_by
                       when String
                         {query.order_by => 1}
                       when Array
                         h = OrderedHash.new
                         query.order_by.each { |ob|
                           case ob
                           when String
                             h[ob] = 1
                           when Hash # should have one entry; will handle all
                             ob.each { |k,v| h[k] = v }
                           else
                             raise "illegal query order_by value #{query.order_by.inspect}"
                           end
                         }
                         h
                       when Hash # Should be an ordered hash, but this message doesn't care
                         query.order_by
                       else
                         raise "illegal order_by: is a #{query.order_by.class.name}, must be String, Array, Hash, or OrderedHash"
                       end
    end
    sel['$hint'] = query.hint if query.hint && query.hint.length > 0
    sel['$explain'] = true if query.explain
    sel['$snapshot'] = true if query.snapshot
  end
  write_doc(sel)
  write_doc(query.fields) if query.fields
end

Instance Attribute Details

#queryObject (readonly)

Returns the value of attribute query.



25
26
27
# File 'lib/mongo/message/query_message.rb', line 25

def query
  @query
end

Instance Method Details

#first_key(key) ⇒ Object



69
70
71
# File 'lib/mongo/message/query_message.rb', line 69

def first_key(key)
  @first_key = key
end