MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment utiliser les variables dans la fonction de carte MongoDB Map-reduce

Comme l'a souligné @Dave Griffith, vous pouvez utiliser le scope paramètre du mapReduce fonction.

J'ai eu un peu de mal à comprendre comment le transmettre correctement à la fonction car, comme l'ont souligné d'autres, la documentation n'est pas très détaillée. Enfin, j'ai réalisé que mapReduce attend 3 paramètres :

  • fonction de carte
  • fonction de réduction
  • objet avec un ou plusieurs des paramètres définis dans la doc

Finalement, je suis arrivé au code suivant en Javascript :

// I define a variable external to my map and to my reduce functions
var KEYS = {STATS: "stats"};

function m() {
    // I use my global variable inside the map function
    emit(KEYS.STATS, 1);
}

function r(key, values) {
    // I use a helper function
    return sumValues(values);
}

// Helper function in the global scope
function sumValues(values) {
    var result = 0;
    values.forEach(function(value) {
        result += value;
    });
    return result;
}

db.something.mapReduce(
    m,
    r,
    {
         out: {inline: 1},
         // I use the scope param to pass in my variables and functions
         scope: {
             KEYS: KEYS,
             sumValues: sumValues // of course, you can pass function objects too
         }
    }
);