MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mappa/Riduci e ordina documenti nidificati

MapReduce è un'operazione che scorre su una serie di documenti ed esegue un'operazione. Non sono del tutto sicuro che sia esattamente quello che vuoi, ma forse stai pubblicando una forma più semplice del tuo vero problema. In ogni caso il codice seguente funziona emettendo 3 volte per il tuo singolo documento, utilizzando l'_id del documento come chiave per la funzione di riduzione.

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();