Hmmm.  I should have examined the code first before my previous comment.  I think that #each is better since the current code really doesn't use the semantics of #reduce and is therefore misleading.  One possible alternative might be the following, however the version using #each is cleaner.  You may be able to do better with some more thought.

    def special_selector
       query = { :$query => selector }
       [
             [:$readPreference, read_pref],
             [:$orderby, sort],
             [:$hint, hint],
             [:$comment, comment],
             [:$snapshot, snapshot],
             [:$maxScan, max_scan],
             [:$showDiskLoc, show_disk_loc]
       ].reduce(query) do |hash, pair|
           key, value = pair
           hash[key] = value if value
           hash
         end
       query
    end