lib/mongo/message/query_message.rb in mongo-0.0.4 vs lib/mongo/message/query_message.rb in mongo-0.1.0
- old
+ new
@@ -16,24 +16,34 @@
write_int(0)
write_string("#{db_name}.#{collection_name}")
write_int(query.number_to_skip)
write_int(query.number_to_return)
sel = query.selector
- if query.order_by && query.order_by.length > 0
+ if query.contains_special_fields
sel = OrderedHash.new
sel['query'] = query.selector
- sel['orderby'] = case query.order_by
- when String
- {query.order_by => 1}
- when Array
- h = OrderedHash.new
- query.order_by.each { |ob| h[ob] = 1 }
- 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
+ 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| h[ob] = 1 }
+ 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
+ if query.hint_fields && query.hint_fields.length > 0
+ hints = OrderedHash.new
+ query.hint_fields.each { |hf| hints[hf] = 1 }
+ sel['$hint'] = hints
+ end
+ if query.explain
+ sel['$explain'] = true
+ end
end
write_doc(sel)
write_doc(query.fields) if query.fields
end