Emacs The Viking
Emacs The Viking

Reputation: 199

Mongo map-reduce output, how to read results back?

I have a map-reduce query that "works" and does what I want however I have so far spectacularly failed to make use of my output data because I cannot workout how to read it back... let me explain... here is my emit:

emit( { jobid: this.job_id, type: this.type}, { count: 1 })

and the reduce function:

reduce: function (key, values) {
    var total = 0;
    for( i = 0; i < values.length; i++ ) {
        total += values[i].count;
    }
    return { jobid: this.job_id, type:this.type, count: total};
},

It functions and the output I get in the results collection looks like this:

{ "_id" : { "jobid" : "5051ef142a120", "type" : 3 }, "value" : { "count" : 1 } }
{ "_id" : { "jobid" : "5051ef142a120", "type" : 5 }, "value" : { "count" : 43 } }
{ "_id" : { "jobid" : "5051f1a9d5442", "type" : 2 }, "value" : { "count" : 1 } }
{ "_id" : { "jobid" : "5051f1a9d5442", "type" : 3 }, "value" : { "count" : 1 } }
{ "_id" : { "jobid" : "5051f299340b1", "type" : 2 }, "value" : { "count" : 1 } }
{ "_id" : { "jobid" : "5051f299340b1", "type" : 3 }, "value" : { "count" : 1 } }

BUT HOW the hell do I issue a query that says find me all jobid entries by "jobid" whilst ignoring the type? I tried this intiailly, expecting two rows of output but got none!

db.mrtest.find( { "_id": { "jobid" : "5051f299340b1" }} );

I have also tried and failed with:

db.mrtest.find( { "_id": { "jobid" : "5051f299340b1" }} );

and whilst:

db.mrtest.find( { "_id" : { "jobid" : "5051f299340b1", "type" : 2 }} )

does produce one row of output as hoped for, changing it to this again fails to produce anything:

db.mrtest.find( { "_id" : { "jobid" : "5051f299340b1", "type" : { $in: [2] }}} )

I get the impression that you can't do such things with the _id field, or can you? I am thinking I need to re-organise my mr output instead but that feels like failing somehow ?!?!

Help!

PS: If anybody can explain why the count is contained in a field called "value", that would also be welcome!"5051f299340b1"

Upvotes: 0

Views: 1852

Answers (2)

Emacs The Viking
Emacs The Viking

Reputation: 199

db.mrtest.find( { "_id.jobid": "506ea3a85e126" })

Upvotes: 1

Marc
Marc

Reputation: 139

Have you tried:

db.mrtest.find( { "_id.jobid": "506ea3a85e126" })

That works for me!

Upvotes: 1

Related Questions