mongodb Map/reduce grouping

Hi,

I have two model, challenge(embeds_many :tasks) and task(embedded_in
:challenge),
finally database structue is like this

{ "_id" : ObjectId("4db8b0524f0b495c3a7dbba4"), "title" : "Testing1",
"created" : ISODate("2011-12-12T00:00:00Z"),
"tasks" : [
        {
                "name" : "task no 1",
                "score" : "5"
        },
        {
                "name" : "task no2",
                "score" : "6"
        }
] }

{ "_id" : ObjectId("4db8b0524f0b495c3a7dbba5"), "title" : "Testing2",
"created" : ISODate("2011-12-12T00:00:00Z"),
"tasks" : [
        {
                "name" : "task no 1",
                "score" : "7"
        },
        {
                "name" : "task no2",
                "score" : "8"
        }
] }

Here i have to select top 5 challenges having highest task score. I am
using mongodb as database and i come to know
there is concept of "Map/reduce grouping" but not able to figure it out.

i was writting this code in my controller but it become more complicated.

def whowins
   @challenge = Challenge.where(:_id => "4ef1a6a454b53001a4000067").first
   $wins ={"first"=>{"id"=>"1", "score"=>"1"},"second"=>{"id"=>"2",
"score"=>"2"},"third"=>{"id"=>"3", "score"=>"3"},"fourth"=>{"id"=>"4",
"score"=>"4"},"fifth"=>{"id"=>"5", "score"=>"5"}}
   temp ={"id"=>"10","score"=>"20"}
   aTotalScore = 0

   if @challenge.instance_of?Challenge

      @challenge.tasks.each_with_index do |orgTasks,index|
          aTotalScore += orgTasks.score.to_i
      end
      $wins["first"]["id"]= @challenge.user_id
      $wins["first"]["score"]= aTotalScore
      aTotalScore = 0

      @challenge.child_challenges.each do |aChildChallenge|
          aChildChallenge.tasks.each_with_index do |eachTasks,index|
              aTotalScore += eachTasks.score.to_i
          end
          #raise aTotalScore.inspect
          if aTotalScore > $wins["first"]["score"]
              #raise "first less"
              whoWinning aTotalScore, $wins["first"]["score"],
aChildChallenge.user_id, 1
        aTotalScore = 0
        next if aTotalScore = 0
          elsif aTotalScore > $wins["second"]["score"]
              #raise "decond less"
              whoWinning aTotalScore, $wins["second"]["score"],
aChildChallenge.user_id, 2
        aTotalScore = 0
        next if aTotalScore = 0
      elsif aTotalScore > $wins["third"]["score"]
              #raise "third less"
              whoWinning aTotalScore, $wins["third"]["score"],
aChildChallenge.user_id, 3
        aTotalScore = 0
        next if aTotalScore = 0
          elsif aTotalScore > $wins["fourth"]["score"]
              #raise "fourht less"
              whoWinning aTotalScore, $wins["fourth"]["score"],
aChildChallenge.user_id, 4
        aTotalScore = 0
        next if aTotalScore = 0
          else
              #raise "fifth less"
              whoWinning aTotalScore, $wins["fifth"]["score"],
aChildChallenge.user_id, 5
        aTotalScore = 0
        next if aTotalScore = 0
          end
      end

   else
    raise "childchallenge"
   end
  end

  private

  def whoWinning(tempScore, winnerScore, winnerId, aPossition )
    aTScore = 0
    aTId = 0
    if aPossition == 5
        $wins["fifth"]["score"],$wins["fifth"]["id"] = tempScore,winnerId
        raise $wins.inspect
        return
    else
        if aPossition == 1
            aTScore,$wins["first"]["score"] = $wins["first"]["score"],tempScore
            aTId = $wins["second"]["id"]
            $wins["second"]["score"],$wins["first"]["id"] = aTScore,winnerId
            if $wins["third"]["score"].to_i > $wins["second"]["score"]
                whoWinning $wins["third"]["score"],
$wins["second"]["score"], aTId, 2
      else
        return
            end
        end

        if aPossition == 2
            aTScore,$wins["second"]["score"] =
$wins["second"]["score"],tempScore
            aTId = $wins["third"]["id"]
            $wins["third"]["score"],$wins["second"]["id"] = aTScore,winnerId
            if $wins["fourth"]["score"] > $wins["third"]["score"]
                whoWinning $wins["fourth"]["score"],
$wins["third"]["score"], aTId, 3
            else
        return
            end
        end

        if aPossition == 3
            aTScore,$wins["third"]["score"] = $wins["third"]["score"],tempScore
            aTId = $wins["fourth"]["id"]
            $wins["fourth"]["score"],$wins["third"]["id"] = aTScore,winnerId
            if $wins["fifth"]["score"] > $wins["fourth"]["score"]
                whoWinning $wins["fifth"]["score"],
$wins["fourth"]["score"], aTId, 4
            else
        return
            end
        end

        if aPossition == 4
            aTScore,$wins["fourth"]["score"] =
$wins["fourth"]["score"],tempScore
            aTId = $wins["fifth"]["id"]
            $wins["fifth"]["score"],$wins["fourth"]["id"] = aTScore,winnerId
            #whoWinning $wins["fifth"]["score"],
$wins["fourth"]["score"], aTId, 5
        end
    end
  end

I m new to mongodb, any help or suggetion will be highly apreciated.
Tks in advance