Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7405703
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 29, 20262026-05-29T05:26:35+00:00 2026-05-29T05:26:35+00:00

I have a weird problem with MongoDB (2.0.2) map reduce. So, the story goes

  • 0

I have a weird problem with MongoDB (2.0.2) map reduce.

So, the story goes like this:

I have Ad model (look for model source extract below) and I need to group up to n ads per category in order to have a nice ordered listing I can later use to do more interesting things.

# encoding: utf-8
class Ad  
  include Mongoid::Document
  cache
  include Mongoid::Timestamps

  field :title
  field :slug, :unique => true

  def self.aggregate_latest_active_per_category

    map = "function () {
        emit( this.category, { id: this._id });
    }"

    reduce = "function ( key, value ) {
      return { ads:v };
    }"

  self.collection.map_reduce(map, reduce, { :out => "categories"} )

  end

All fun and games up until now.

What I expect is to get a result in a form which resembles (mongo shell for db.categories.findOne() ):

    {
      "_id" : "category_name",
      "value" : {
          "ads" : [
                          {
                            "id" : ObjectId("4f2970e9e815f825a30014ab")
                          },
                          {
                            "id" : ObjectId("4f2970e9e815f825a30014b0")
                          },
                          {
                            "id" : ObjectId("4f2970e9e815f825a30014b6")
                          },
                          {
                            "id" : ObjectId("4f2970e9e815f825a30014b8")
                          },
                          {
                            "id" : ObjectId("4f2970e9e815f825a30014bd")
                          },
                          {
                            "id" : ObjectId("4f2970e9e815f825a30014c1")
                          },
                          {
                            "id" : ObjectId("4f2970e9e815f825a30014ca")
                          },
                          // ... and it goes on and on
          ]
        }
      }

Actually, it would be even better if I could get value to contain only array but MongoDB complains about not supporting that yet, but, with later use of finalize function, that is not a big problem I want to ask about.

Now, back to problem. What actually happens when I do map reduce is that it spits out something like :

{
    "_id" : "category_name",
    "value" : {
        "ads" : [
            {
                "ads" : [
                    {
                        "ads" : [
                            {
                                "ads" : [
                                    {
                                        "ads" : [
                                            {
                                                "id" : ObjectId("4f2970d8e815f825a3000011")
                                            },
                                            {
                                                "id" : ObjectId("4f2970d8e815f825a3000017")
                                            },
                                            {
                                                "id" : ObjectId("4f2970d8e815f825a3000019")
                                            },
                                            {
                                                "id" : ObjectId("4f2970d8e815f825a3000022")
                                            },

   // ... on and on and on

… and while I could probably work out a way to use this it just doesn’t look like something I should get.

So, my questions (finally) are:

  1. Am I doing something wrong and what is it?
  2. I there something wrong with MongoDB map reduce (I mean besides all the usual things when compared to hadoop)?
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-29T05:26:36+00:00Added an answer on May 29, 2026 at 5:26 am

    Yes, you’re doing it wrong. Inputs and outputs of map and reduce should be uniform. Because they are meant to be executed in parallel, and reduce might be run over partially reduced results. Try these functions:

    var map = function() {
      emit(this.category, {ads: [this._id]});
    };
    
    var reduce = function(key, values) {
      var result = {ads: []};
    
      values.forEach(function(v) {
        v.ads.forEach(function(a) {
          result.ads.push(a)
        });
      });
      return result;
    }
    

    This should produce documents like:

    {_id: category, value: {ads: [ObjectId("4f2970d8e815f825a3000011"), 
                                  ObjectId("4f2970d8e815f825a3000019"), 
                                  ...]}}
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have weird problem with this code: if I run it like shown below
i have a weird problem. i would like to delete an assembly(plugin.dll on harddisk)
I have this weird problem with setting up cookies with PHP. Everything worked fine
I have a weird problem, and I don't know if this is the default
I have this weird problem where my Google Maps API script doesn't work, no
I have this weird problem whenever I roll my mouse over each of the
I have this weird problem with one of my SP's. I have a SP
I have a weird problem and I would like if someone can enlighten me
I have a weird problem , below are two simple get calls and returning
I have weird problem with this code $('img').hover(function(){ var $cap = $(this).parent().find('.cap'); window.setTimeout(function(){$cap.stop(true,false).animate({bottom:164},500)},500); },function(){

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.