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

Sådan bruges variabler i MongoDB Map-reducer kortfunktion

Som påpeget af @Dave Griffith, kan du bruge scope parameter for mapReduce funktion.

Jeg kæmpede lidt for at finde ud af, hvordan jeg korrekt overfører det til funktionen, fordi dokumentationen, som påpeget af andre, ikke er særlig detaljeret. Endelig indså jeg, at mapReduce forventer 3 parametre:

  • kortfunktion
  • reducer funktion
  • objekt med en eller flere af de parametre, der er defineret i dokumentet

Til sidst kom jeg frem til følgende kode i 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
         }
    }
);


  1. Sådan går du i produktion med MongoDB - Top ti tips

  2. MongoDB findOneAndUpdate()

  3. Returner kun matchede underdokumentelementer inden for et indlejret array

  4. Hvordan returnerer man kun en del af array i MongoDB?