sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man använder variabler i MongoDB Map-reduce map funktion

Som påpekat av @Dave Griffith kan du använda scope parametern för mapReduce funktion.

Jag kämpade lite för att ta reda på hur jag skulle skicka det till funktionen på rätt sätt eftersom, som andra påpekat, dokumentationen inte är särskilt detaljerad. Till slut insåg jag att mapReduce väntar på 3 params:

  • kartfunktion
  • reduceringsfunktion
  • objekt med en eller flera av parametrarna som definieras i dokumentet

Så småningom kom jag fram till följande kod 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. Hur man installerar Apache CouchDB 2.3.0 i Linux

  2. Hur undviker man transparent_hugepage/defrag-varning från mongodb?

  3. php mongodb hitta n:e posten i samlingen

  4. Mongo konverterar inbäddade dokument till array