Mongodb Map-уменьшить выход удваивается - PullRequest
0 голосов
/ 28 декабря 2011

в моей исходной базе данных есть документы, такие как ..

{date:14, month:1, year:2011, name:"abc", item:"A"}
{date:14, month:1, year:2011, name:"abc", item:"B"}
{date:14, month:1, year:2011, name:"def", item:"A"}
{date:14, month:1, year:2011, name:"def", item:"B"}
{date:15, month:1, year:2011, name:"abc", item:"A"}
{date:16, month:1, year:2011, name:"abc", item:"A"}
{date:15, month:1, year:2011, name:"def", item:"A"}
{date:16, month:1, year:2011, name:"def", item:"A"}

, а моя карта редуцирования похожа на ...

var m = function(){    
            emit({name:this.name, date:this.date, month:this.month, year:this.year},        {count:1})
        }
var r = function(key, values) {
        var total_count = 0;
        values.forEach(function(doc) {
            total_count += doc.count;
            });
    return {count:total_count};
};

var res = db.source.mapReduce(m, r, { out : { "merge" : "bb_import_trend" } } );

, поэтому коллекция "myoutput" будет иметь такое же число ....

{ "_id" : { date : 14,
    month : 1,
        year : 2011,
        name : "abc"
      },
  "_value" : { "count" : 2 }
},
{ "_id" : { date : 14,
    month : 1,
        year : 2011,
        name : "def"
      },
  "_value" : { "count" : 2 }
},
{ "_id" : { date : 15,
    month : 1,
        year : 2011,
        name : "abc"
      },
  "_value" : { "count" : 1 }
},
{ "_id" : { date : 15,
    month : 1,
        year : 2011,
        name : "def"
      },
  "_value" : { "count" : 1 }
},
{ "_id" : { date : 16,
    month : 1,
        year : 2011,
        name : "abc"
      },
  "_value" : { "count" : 1 }
},
{ "_id" : { date : 16,
    month : 1,
        year : 2011,
        name : "def"
      },
  "_value" : { "count" : 1 }
}

итого 6 документов

, поэтому, когда в мою исходную коллекцию было добавлено еще три документа с датой 17, например ...

{date:17, month:1, year:2011, name:"abc", item:"A"}
{date:17, month:1, year:2011, name:"abc", item:"B"}
{date:17, month:1, year:2011, name:"def", item:"A"}

.... и снова я запускаю карту - уменьшите, это должно быть просто добавление двух документов, таких как ...

предыдущие 6 плюс

...
{ "_id" : { date : 17,
    month : 1,
        year : 2011,
        name : "abc"
      },
  "_value" : { "count" : 2 }
},
{ "_id" : { date : 17,
    month : 1,
        year : 2011,
        name : "def"
      },
  "_value" : { "count" : 1 }
}

, но вместо этого он дублирует все предыдущие 6документы и добавляет еще 2 новых ... всего 14 документов в моей выходной коллекции (хотя я использовал слияние в выходной).

Примечание>: когда я использую другую базу данных с той же исходной коллекцией и делаюта же самая процедура дает мне желаемый результат (всего из 8 коллекций). Но моя база данных, используемая моим графическим интерфейсом, все еще дублирует старые.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...