hi all,
After continuous 10 hours work i fixed it out. below is the code which i
written in challenge model.
def self.task_score_map
    <<-MAP
      function() {
        this.tasks.forEach(function(aTask) {
          emit(aTask.score, {score: aTask.score});
        });
      }
    MAP
  end
  def self.task_score_reduce
    <<-REDUCE
      function(key, values) {
         var sum = 0;
         values.forEach(function(aScore) {
            sum += parseInt(aScore.score);
        });
        return sum;
        }
    REDUCE
  end
  def self.task_score_build(opts)
    self.collection.map_reduce(self.task_score_map, self.task_score_reduce,
opts)
  end
  def self.task_score(opts={})
    hash = opts.merge({
      :out    => {:inline => true},
      :raw    => true
    })
    self.task_score_build(hash).find()
  end
and this is result
#<Enumerator: {"results"=>[{"_id"=>"10",
"value"=>{"score"=>"10"}},
{"_id"=>"11",
"value"=>{"score"=>"11"}},
{"_id"=>"5", "value"=>30.0},
{"_id"=>"6",
"value"=>{"score"=>"6"}},
{"_id"=>"7",
"value"=>{"score"=>"7"}},
{"_id"=>"8",
"value"=>{"score"=>"8"}},
{"_id"=>"9",
"value"=>{"score"=>"9"}}],
"timeMillis"=>0,
"counts"=>{"input"=>6, "emit"=>12,
"reduce"=>1, "output"=>7},
"ok"=>1.0}:find>
i m sorting this a/c to score. but  i need a/c to user_id. here user_id
belongs to challenge model.
"_id" : ObjectId("4ef1a6a454b53001a4000067"),
  "user_id" : "100002573213371",
  "title" : "social who wins",
  "description" : "social who wins",
  "updated_at" : new Date("Wed, 21 Dec 2011 14:58:04 GMT
+05:30"),
  "created_at" : new Date("Wed, 21 Dec 2011 14:58:04 GMT
+05:30"),
  "tasks" : [{
      "is_complete" : 0,
      "score_by" : "Check box:1 for checking off the task",
      "score" : "5",
      "name" : "task no 1",
      "_id" : ObjectId("4ef1a6a454b53001a4000068")
    }, {
      "is_complete" : 0,
      "score_by" : "Self-report number",
      "score" : "6",
      "name" : "task no 2",
      "_id" : ObjectId("4ef1a6a454b53001a4000069")
    }],
}
i need to pass user_id instead of score.
def self.task_score_map
    <<-MAP
      function() {
        this.tasks.forEach(function(aTask) {
          emit(this.user_id, {score: aTask.score});
        });
      }
    MAP
  end
any idea...............
On 23 December 2011 11:38, Pravin Mishra
<diatm.pravin.it.07.27-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>wrote:
> Hi Guy''s,
>
> I am new to map / reduce and trying to figure out a way to collect the
> following data using map / reduce instead doing it my (slow) application
> logic:
>
> I have a collection ''challenge'' with a 1:n relation to a
collection
> ''tasks''. Now I''d like to receive an array of
results that gives top
> five heightest scored challenge.
>
> For map I tried something like:
>
> map = function () {
>   emit(this.user_id, { count:1 });
> }
>
>
> and reduce:
>
> reduce = function (key, score) {
>   var sum = 0;
>   score.forEach(function(doc){ sum += 1; });
>   return { count:sum };
> }
>
> I fired this against my tasks collection:
>
> var mr = db.tasks.mapReduce(map, reduce, { out: "results" });
> But I get crucial results when querying:
>
> db[mr.result].find();
> I am using Mongoid on Rails and am completely lost with it. Can someone
> point me into the right direction?
>
> my data something  like this
>
> /* 13 */
> {
>   "_id" : ObjectId("4ef1a6a454b53001a4000067"),
>   "user_id" : "100002573213371",
>   "title" : "social who wins",
>   "description" : "social who wins",
>   "updated_at" : new Date("Wed, 21 Dec 2011 14:58:04 GMT
+05:30"),
>   "created_at" : new Date("Wed, 21 Dec 2011 14:58:04 GMT
+05:30"),
>   "tasks" : [{
>       "is_complete" : 0,
>       "score_by" : "Check box:1 for checking off the
task",
>       "score" : "5",
>       "name" : "task no 1",
>       "_id" : ObjectId("4ef1a6a454b53001a4000068")
>     }, {
>       "is_complete" : 0,
>       "score_by" : "Self-report number",
>       "score" : "6",
>       "name" : "task no 2",
>       "_id" : ObjectId("4ef1a6a454b53001a4000069")
>     }],
> }
>
> /* 14 */
> {
>   "_id" : ObjectId("4ef1a6a454b53001a400006d"),
>   "canCompleteBeforeTasks" : true,
>   "challenge_id" :
ObjectId("4ef1a6a454b53001a4000067"),
>   "created_at" : new Date("Wed, 21 Dec 2011 14:58:04 GMT
+05:30"),
>   "description" : "social who wins",
>   "tasks" : [{
>       "is_complete" : 0,
>       "score_by" : "Check box:1 for checking off the
task",
>       "score" : "5",
>       "name" : "task no 1",
>       "_id" : ObjectId("4ef1a6a454b53001a400006e")
>     }, {
>       "is_complete" : 0,
>       "score_by" : "Self-report number",
>       "score" : "7",
>       "name" : "task no 2",
>       "_id" : ObjectId("4ef1a6a454b53001a400006f")
>     }],
>   "title" : "social who wins",
>   "updated_at" : new Date("Wed, 21 Dec 2011 14:58:04 GMT
+05:30"),
>   "user_id" : "100003135115833"
> }
>
> /* 15 */
> {
>   "_id" : ObjectId("4ef1a6a454b53001a4000073"),
>   "challenge_id" :
ObjectId("4ef1a6a454b53001a4000067"),
>   "created_at" : new Date("Wed, 21 Dec 2011 14:58:04 GMT
+05:30"),
>   "description" : "social who wins",
>   "tasks" : [{
>       "is_complete" : 0,
>       "score_by" : "Check box:1 for checking off the
task",
>       "score" : "5",
>       "name" : "task no 1",
>       "_id" : ObjectId("4ef1a6a454b53001a4000074")
>     }, {
>       "is_complete" : 0,
>       "score_by" : "Self-report number",
>       "score" : "8",
>       "name" : "task no 2",
>       "_id" : ObjectId("4ef1a6a454b53001a4000075")
>     }],
>   "title" : "social who wins",
>   "updated_at" : new Date("Wed, 21 Dec 2011 14:58:04 GMT
+05:30"),
>   "user_id" : "100003174704960"
> }
>
>
> Thx in advance.
>
>
>
> ++++++++++++++++++
> Pravin Mishra
>
>
-- 
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.