Please, I need to undertand ASAP Mongoose way to map reduce.
I already had some succes with the map part but not being able to generate 
the map_reduce_collection in the right way. It seems to just doing a 
passthru from the map to the final result without reducing.

Any clue or link will be really appreciated.

Regards.
Leo
_____________________________________________________________________________________________________________________
 
var Answer = require('../models/answer');
mongoose.connect('mongodb://localhost/MyDB');

  var mapFunction = function() {
    emit(this.questionId, {response: this.response, questionId: 
this.questionId}); //sends the url 'key' and a 'value' to the reduce 
function
  } 
  var reduceFunction = function(key, value) { //reduce function
    var result = {};
    result.summary= [0,0, 0, 1000] ;
    console.dir(key);
    console.dir(value);
    console.dir(result);
    for (index in value) {  
      var doc = value[index];
      console.log('response:' +  doc.response);
      
      result.summary[0] += (doc.response=='Y'? 1 : 0);
      result.summary[1] += (doc.response=='N'? 1 : 0);
      result.summary[2] += (doc.response=='N/A'? 1 : 0);
      result.summary[3] -= (doc.response!=null ? 1 : 0);      
    }

    result.questionId = key;
    console.log('leaving reduce'); 
   return result;
  }; 

  var command = {
        mapreduce: "answers", //the name of the collection we are 
map-reducing *note, 
                            //this is the model Ping we defined 
above...mongoose automatically 
                            //appends an 's' to the model name within 
mongoDB
        map: mapFunction.toString(), 
        reduce: reduceFunction.toString(), 
        query: { surveyId:'1', responseType: 'su', userType:'l,s' }, 
        //sort: {$natural: -1 }, Seems not to be working at all any way we 
have chance to sort in the last find 
        out: 'map_red' //the collection that will contain the map-reduce 
results
  };

  mongoose.connection.db.executeDbCommand(command, function(err, dbres) {
      if(err){ 
        console.error(err);
      }else {
        console.log('No erros in first executeDbCommand');
        console.dir(dbres.documents);
        console.dir(dbres.documents[0]);
        mongoose.connection.db.collection('map_red', function(err, 
collection) { //query the new map-reduced table
        
        if(err) { 
          console.error(err);
        } else {
          console.log('We are closer!');
          collection
            .find({})
            .sort({'_id': -1})
            //.limit(10)
            .toArray(function(err, map_reduce_result) { //only pull in the 
top 10 results and sort descending by number of pings
              if(err) {
                console.error(err);
              } else{
                console.log('But the map_reduce_result is not what 
expected, it\'s just the result of map without the reduce part. WTF!!!');
                console.dir(map_reduce_result);
              }  
          });
      }  
  });

        }

        //If you need to alert users, etc. that the mapreduce has been run, 
enter code here
  });

_____________________________________________________________________________________________________________________




-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to nodejs@googlegroups.com
To unsubscribe from this group, send email to
nodejs+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

Reply via email to