sql >> Base de Datos >  >> NoSQL >> MongoDB

Mapear/Reducir y Ordenar Documento Anidado

MapReduce es una operación que recorre un montón de documentos y realiza una operación. No estoy completamente seguro de que sea exactamente lo que desea, pero posiblemente esté publicando una forma más simple de su problema real. En cualquier caso, el siguiente código funciona emitiendo 3 veces para su único documento, utilizando el _id del documento como clave para la función de reducción.

doc = {_id : 16, days : { 1 : 123, 2 : 129, 3 : 140, 4 : 56, 5 : 57, 6 : 69, 7 : 80 }};
db.so.insert(doc);

map = function() {
  emit(this._id, this.days["1"]);
  emit(this._id, this.days["3"]); 
  emit(this._id, this.days["7"]); 
}

reduce = function (k, vals) {
  var sum = 0;
  vals.forEach(function (v) {sum += v;});
  return sum;
}

res = db.so.mapReduce(map, reduce, {out : {inline : 1}});
res.find();